PixelFormat이 같아야 원하는 결과를 얻을수 있습니다.
=> Image2->Picture->Bitmap->PixelFormat = Image1->Picture->Bitmap->PixelFormat;
위 코드를 추가 해 주시면 됩니다.
비트맵 님이 쓰신 글 :
: Image1에 있는 그림 픽셀 값을 변경하여 Image2에 출력하려고 합니다.
:
: 조건 :
: Image1에는 24bit BMP 파일이 Load된 상태이며, Image2는 Clear 상태입니다.
:
:
: int width = Image1->Picture->Bitmap->Width * 3;
: int height = Image1->Picture->Bitmap->Height;
:
: unsigned char *orgColor, *grayColor;
: double average;
:
: for(int y = 0; y < height; y++)
: {
: orgColor = (unsigned char *)Image1->Picture->Bitmap->ScanLine[y];
: grayColor = (unsigned char *)Image2->Picture->Bitmap->ScanLine[y];
: for(int x = 0; x < width; x += 3)
: {
: average = (orgColor[x] + orgColor[x+1] + orgColor[x+2]) / 3;
: grayColor[x] = grayColor[x+1] = grayColor[x+2] = average;
: }
: }
:
:
: 이 경우 "Scan line index out of range." 에러가 발생합니다.
: 그래서 Image2의 크기를 설정해주었는데요.
:
:
: int width = Image1->Picture->Bitmap->Width * 3;
: int height = Image1->Picture->Bitmap->Height;
:
: // 추가
: Image2->Picture->Bitmap->Width = Image1->Picture->Bitmap->Width;
: Image2->Picture->Bitmap->Height = Image1->Picture->Bitmap->Height;
:
: unsigned char *orgColor, *grayColor;
: double average;
:
: for(int y = 0; y < height; y++)
: {
: orgColor = (unsigned char *)Image1->Picture->Bitmap->ScanLine[y];
: grayColor = (unsigned char *)Image2->Picture->Bitmap->ScanLine[y];
: for(int x = 0; x < width; x += 3)
: {
: average = (orgColor[x] + orgColor[x+1] + orgColor[x+2]) / 3;
: grayColor[x] = grayColor[x+1] = grayColor[x+2] = average;
: }
: }
:
:
: 에러는 발생하지 않지만 Image2에 흰색만 출력이 됩니다.
: 하지만 Image2에도 Image1과 같이 그림이 Load된 상태이면 정상적으로 변경한 값이 출력됩니다.
:
:
: int width = Image1->Picture->Bitmap->Width * 3;
: int height = Image1->Picture->Bitmap->Height;
:
: // 수정
: Image2->Picture->Bitmap->LoadFromFile("1.bmp");
:
: unsigned char *orgColor, *grayColor;
: double average;
:
: for(int y = 0; y < height; y++)
: {
: orgColor = (unsigned char *)Image1->Picture->Bitmap->ScanLine[y];
: grayColor = (unsigned char *)Image2->Picture->Bitmap->ScanLine[y];
: for(int x = 0; x < width; x += 3)
: {
: average = (orgColor[x] + orgColor[x+1] + orgColor[x+2]) / 3;
: grayColor[x] = grayColor[x+1] = grayColor[x+2] = average;
: }
: }
:
:
: 왜 그런건가요?? ㅠ 많은 답변 주시면 감사하겠습니다~
: 수고하세요 ^^
|