algorytm.org

Implementacja w C/C++



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Algorytm Sierra 2 - Implementacja w C/C++
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 30 lipca 2009 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Sierra 2 - C++/Unit1.cpp:
//Tomasz Lubiński (C)2009
// http://www.algorytm.org
//Algorytm Sierra 2

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

typedef struct Pixel
{
   Byte b;
   Byte g;
   Byte r;
   Byte reserved;
} TPixel;

/* by uniknac indeksow mniejszych od zera w tablicy bledow */
#define SHIFT 2

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i,j,p;
float w,a[252][231];
TPixel *pixelOrg, *pixelNew, white, black;

//przygotuj wartosci bialy i czarny
white.b = 255;
white.g = 255;
white.r = 255;
black.b = 0;
black.g = 0;
black.r = 0;

//przygotuj obrazy wynikowe
Image2->Canvas->Brush->Color = clWhite;
Image2->Canvas->Rectangle(0, 0, Image2->Width, Image2->Height);
Image2->Picture->Bitmap->PixelFormat = pf32bit;

Image3->Canvas->Brush->Color = clWhite;
Image3->Canvas->Rectangle(0, 0, Image3->Width, Image3->Height);
Image3->Picture->Bitmap->PixelFormat = pf32bit;

//przygotuj format obrazu zrodlowego
Image1->Picture->Bitmap->PixelFormat = pf32bit;

TColor color;
p = StrToInt(Form1->Edit1->Text);

//zwykle progowe
for (j=0; j<230; j++){
        pixelOrg = (TPixel *)Image1->Picture->Bitmap->ScanLine[j];
        pixelNew = (TPixel *)Image2->Picture->Bitmap->ScanLine[j];
        for (i=0; i<248; i++){
                if (p > pixelOrg->r)
                        *pixelNew = black;
                else
                        *pixelNew = white;
                pixelOrg++;
                pixelNew++;
                }
        }
//Sierra 2
for (i=0; i<252; i++)
        for (j=0; j<231; j++)
                a[i][j] = 0;
for (j=0; j<230; j++){
        pixelOrg = (TPixel *)Image1->Picture->Bitmap->ScanLine[j];
        pixelNew = (TPixel *)Image3->Picture->Bitmap->ScanLine[j];
        for (i=0; i<248; i++){
                w = pixelOrg->r + a[i+SHIFT][j];
                if (p>w) {
                        *pixelNew = black;
                } else {
                        *pixelNew = white;
                        w = w - 255.0;
                }

                a[i+1+SHIFT][j  ] = a[i+1+SHIFT][j  ] + (w*4.0/16.0);
                a[i+2+SHIFT][j  ] = a[i+2+SHIFT][j  ] + (w*3.0/16.0);

                a[i-2+SHIFT][j+1] = a[i-2+SHIFT][j+1] + (w*1.0/16.0);
                a[i-1+SHIFT][j+1] = a[i-1+SHIFT][j+1] + (w*2.0/16.0);
                a[i  +SHIFT][j+1] = a[i  +SHIFT][j+1] + (w*3.0/16.0);
                a[i+1+SHIFT][j+1] = a[i+1+SHIFT][j+1] + (w*2.0/16.0);
                a[i+2+SHIFT][j+1] = a[i+2+SHIFT][j+1] + (w*1.0/16.0);

                pixelOrg++;
                pixelNew++;
        }
}
}
//---------------------------------------------------------------------------
 
Dodaj komentarz