C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[72930] Pixel 값을 변경 후 출력하려고 합니다.
비트맵 [] 4390 읽음    2015-08-27 17:34
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;
		}
	}


왜 그런건가요?? ㅠ 많은 답변 주시면 감사하겠습니다~
수고하세요 ^^

+ -

관련 글 리스트
72930 Pixel 값을 변경 후 출력하려고 합니다. 비트맵 4390 2015/08/27
72933     Re:Pixel 값을 변경 후 출력하려고 합니다. 잔머리교주 3961 2015/08/28
72934         Re:Re:Pixel 값을 변경 후 출력하려고 합니다. 비트맵 3910 2015/08/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.