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;
}
}
왜 그런건가요?? ㅠ 많은 답변 주시면 감사하겠습니다~
수고하세요 ^^
|