VCL의 TBitmap의 각 Pixel에 접근하는 방법에는
크게 두가지 방법이 있습니다.
방법1
//직관적이지만 매우 속도가 드린 방법입니다.
bmp->Canvas->Pixels[x][y];
방법2
ScanLine을 이용하는 방법
//대충 아래와 같은식으로 하면 됩니다.
int __fastcall GetBitmapPixel(TBitmap *bmp , int x , int y)
{
bmp->PixelFormat=pf32bit;
int *pLine=bmp->ScanLine[bmp->Height - y-1];
return pLine[x];
//ScanLine의 결과는 각 라인의 시작위지 포인터입니다.
//그것을 PixelFormat에 따라 8bit 이면 1Byte씩 24bit포멧이면 3Byte씩 이동하면 ... 원하는 위치의 Pixel값을 읽을수 있습니다.
}
그럼...
피니아 님이 쓰신 글 :
: c++빌더를 이용하여 어떠한 이미지에 대한
: 픽셀 연산을 하고 싶습니다.
:
: 현재
: void __fastcall TForm1::FormCreate(TObject *Sender)
: {
: image = new unsigned char*[256];
: for(int i = 0; i < 256; i++)
: {
: image[i] = new unsigned char[256];
: }
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: int width, height;
: int tot;
:
: if(OpenDialog1->Execute())
: {
: TJPEGImage *Hjpeg = new TJPEGImage();
: Hjpeg->LoadFromFile(OpenDialog1->FileName);
: Image1->Picture->Bitmap->Assign(Hjpeg);
: delete Hjpeg;
:
:
:
: Image1->Picture->Bitmap->PixelFormat=pf32bit;
: ///////////////////////////////////////////////////////////////////////////////////////
:
: 위 방법으로 jpeg 이미를 불러 왔구요
: 불러온 이미지에 대한 참조파일1 의 그림처럼 [0][1] 픽셀과 [0][2]픽셀 빼기 연산
: 다시 [0][2] - [0][3] 이런 식으로 전체 화면의 픽셀을 빼고 싶습니다.
: 헌대 빌더가 처음이다 보니 방법은 알겠는대;; 어떤 형식으로 이루어 져야할지
: 픽셀들의 값을 어떻해 가져와야 하는지 잘 모르겠습니다;;
: 한말씀 부탁드립니다.
: 참조 파일 1은 제가 수행하고자 하는 방법의 대략적인 예 입니다.
: