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
[72933] Re:Pixel 값을 변경 후 출력하려고 합니다.
잔머리교주 [friendplus] 3960 읽음    2015-08-28 13:36
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;
: 		}
: 	}
: 

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

+ -

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