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?

Technika mikrowzorów (metoda komórkowa) - Implementacja w C/C++
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 12 września 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.

Patterning - C++/Unit1.cpp:
//Tomasz Lubiński (C)2009
// http://www.algorytm.org
//Patterning - technika mikrowzorcow
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "math.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;


Byte pattern[2][3][3] =
{
   {
      {8, 3, 4},
      {6, 1, 2},
      {7, 5, 9},
   },
   {
      {1, 7, 4},
      {5, 8, 3},
      {6, 2, 9},
   }
};

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i,j,k,l,choosenPattern;
float p;
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 obraz wynikowy
Image2->Canvas->Brush->Color = clWhite;
Image2->Canvas->Rectangle(0, 0, Image2->Width, Image2->Height);
Image2->Picture->Bitmap->PixelFormat = pf32bit;

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

//pobierz prog
p = StrToInt(Form1->Edit1->Text);
p /= 9.0;

//pobierz wybrany wzorzec
if (cluster->Checked == true) {
        choosenPattern = 0;
}
else {
        choosenPattern = 1;
}
//zwykle progowe
for (j=0; j<Image1->Height; j++){
        for (k=0; k<3; k++) {
                pixelNew = (TPixel *)Image2->Picture->Bitmap->ScanLine[j*3 + k];
                pixelOrg = (TPixel *)Image1->Picture->Bitmap->ScanLine[j];
                for (i=0; i<Image1->Width; i++){
                        for (l=0; l<3; l++) {
                                if (p * pattern[choosenPattern][k][l] > pixelOrg->r)
                                        *pixelNew = black;
                                else
                                        *pixelNew = white;
                                pixelNew++;
                                }
                        pixelOrg++;
                        }
                }
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label6Click(TObject *Sender)
{
 ShellExecute(Application->Handle,
             "open",
             "http://www.algorytm.org",
             NULL,
             NULL,
             SW_NORMAL);
}
//---------------------------------------------------------------------------

Dodaj komentarz