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
[45600] Re:Pixels[][]함수보다 더 빠른 함수가 있나요?
지상광휘 [geolight] 1350 읽음    2006-07-09 09:09
이미지의 픽셀 포맷이 8비트나 24비트, 32비트일 경우라면 TBitmap 클래스의 ScanLine 프로퍼티를 이용해서 데이터 단위로 직접 처리하는 방법도 있습니다(16비트일 경우는 조금 비추). 이 프로퍼티는 void* 형태로 리턴되는데, 이것을 원하는 형태로 캐스팅해서 사용하면 됩니다.
예를 들어 이미지가 24비트일 경우,
Graphics::TBitmap* Bmp = new Graphics::TBitmap;
....
unsigned char* CurrentLine = (unsigned char *)(Bmp->ScanLine[0]);  //해당 이미지의 첫번째 행을 구성하는 메모리를 가리키는 포인터.
unsigned char BValue = CurrentLine[0]; //블루
unsigned char GValue = CurrentLine[1]; //그린
unsigned char RValue = CurrentLine[2]; //레드
....
이런 식으로 구성됩니다.
만약 (0,0) 좌표의 색을 RGB(128, 72, 111)로 변경하고 싶을 경우,
...
CurrentLine = (unsigned char *)(Bmp->ScanLine[0]);
CurrentLine[0] = 111;
CurrentLine[1] = 72;
CurrentLine[2] = 128;
...을 입력하면 됩니다.
좌표가 (10, 25)이라면
CurrentLine = (unsigned char *)(Bmp->ScanLine[25]);
CurrentLine[10 + 0] = 111;
CurrentLine[10 + 1] = 72;
CurrentLine[10 + 2] = 128;
...라는 형식이 됩니다.

이용태 님이 쓰신 글 :
: Pixels[][] 함수..
:
: 즉.. 이미지상에 원하는 지점의 픽셀에 원하는 색을 칠하는 함수입니다.
:
: 데이터 파일에서 데이터를 계산하여 나온 값을 컬러변환(0~255)하여 각 픽셀마다 찍어주는 작업을 하고 있는데요...
:
: 픽셀마다 데이터파일의 데이터가 다르므로 이 작업은 픽셀마다 매번 반복됩니다.
:
: 그런데 계산을 한 후, 픽셀에 색을 찍는 속도가 느린거 같습니다.
:
: 혹 Pixels[][]보다.. 더 빠르게 픽셀에 값을 찍어주는 함수가 있는지 궁금합니다.
:
: 간단한 예제도 첨부해주신다면 더욱 좋겠습니다..;;;
:
: 답변 부탁드립니다.

+ -

관련 글 리스트
45597 Pixels[][]함수보다 더 빠른 함수가 있나요? 이용태 950 2006/07/08
45600     Re:Pixels[][]함수보다 더 빠른 함수가 있나요? 지상광휘 1350 2006/07/09
45599     Re:Pixels[][]함수보다 더 빠른 함수가 있나요? 잿빛날개 1127 2006/07/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.