C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[6988] 도저히 못찾겠다.. 32bit Icon 지원하는 TImageList..
김상구.패패루 [peperu] 1195 읽음    2003-03-25 12:58
TImageList 많이들 쓰시죠?

최근 이놈땜시 아주 돌아버리다가 지금은 포기하고 그냥 갈 길 가고 있는데요..
제가 최근에 AWIcons라는 프로그램 소개해 드렸죠?

그 프로그램으로 제작한 32bit아이콘을 빌더에 적용시켜보니 Cursor와 Application아이콘에는 아주 잘 적용됩니다. 32bit아이콘은 24bit의 칼라정보와 8bit의 알파채널이 포함되어 있기 때문에 배경색에 상관없이 매끈한 외곽선을 표현할 수 있죠.
이건 디자인 문제와 직결되는데, 디자이너 입장에서는 도트작업을 하지 않아도 손쉽게 아름다운 아이콘을 만들 수 있기 때문에 상당히 중요한 문제입니다.

각설하고, 아무튼, 이 32bit 아이콘을 TImageList가 제대로 지원하지 못한다는게 문제인데요, 크게 세부분에 문제가 있습니다.
첫번째는 데이터를 dfm 파일에 기록하는데 있어서 알파채널의 정보가 누락되는 것 같습니다.
두번째는 Draw 함수의 문제인데 ImageList_..로 시작하는 API를 호출하게 되어 있죠. 근데 배경칼라를 인자로 넘기게 되어 있기 때문에 테마가 적용된 툴바에서는 배경의 연한 그라데이션 효과가 제대로 표현되지 않습니다.
세번째는 Disable된 이미지 렌더링 루틴의 문제인데.. 이게 예전 16color 기준으로 되어 있어서 24bit 이상의 칼라를 사용한 아이콘에는 적합하지 않지만.. 뭐 커다란 흠은 아닌 것 같네요.

이 중 가장 심각한 문제는 아이콘 데이터를 시리얼라이즈하는.. 즉, dfm파일에 기록하는 부분에서 32bit알파채널부분을 제대로 기록을 못한다는거죠. 먼소린가 하니.. 디자인타임에서 직접 Icon을 불러와서 TImageList에 삽입하면 이 알파채널이 제대로 적용되지 않는다는 점입니다. 대신 런타임시에 TImageList::AddIcon() 함수를 써서 동적으로 추가할 경우 알파채널이 적용됩니다. 하지만 두번째 문제로 인해 완벽하게 동작하진 않죠.

TImageList의 DoDraw 함수가 virtual이라서 이놈을 오버라이드하면 두번째와 세번째 문제는 해결할 수 있는데, 첫번째 문제는 좀 골치아프군요.
아무래도 이런 문제는 다른 사람들도 부딛히지 않았을까 해서 며칠동안 관련 정보를 뒤져봤는데.. 결국 저는 못찾았습니다. ㅠ ㅠ
어려워서 해결하지 못했다기 보다는 뭐랄까.. 다들 별로 관심이 없는 분위기. 개발자들은 아직까지 2000 플랫폼 쓰는 사람이 압도적인가봅니다. ㅋㅋㅋ

테마메니저를 만든 사람의 홈피.. 델파이젬에 가서 자료를 찾다보니 거기에 있는 셈플 프로그램은 32bit 아이콘이 제대로 적용된 툴바를 구현한 것 처럼 보여서 옳다구나.. 소스를 분석해 보고 내용을 살펴봤는데.. 눈속임이었슴다.. 그림자 효과가 없는 단순히 경계선에 대한 AntiAlias가 적용된 아이콘을 썼기 때문에 티가 적게 났을 뿐 배경을 진한색(검정 등)으로 적용해 보니 역시 알파채널은 적용되지 않더군요. ㅠ ㅠ

Graphics32 컴포넌트의 BitmapList를 써 볼까 했더니만.. 그건 아예 TImageList와 호환되는 컴포넌트가 아니라서 적용 범위가 좁아지게 되고..

지금은 그냥 포기하고 딴거 하고 있습니다. 괜히 시간만 낭비한 것 같습니다.
맘먹고 덤비면 32bit 아이콘도 제대로 지원하는 TImageList를 만들 수는 있을 것 같기는 한데 엄두가 안납니다.

혹시 이쪽 분야로 정보 가지고 계신분 있으시면 좀 알려주시면 고맙겠네요.

+ -

관련 글 리스트
6988 도저히 못찾겠다.. 32bit Icon 지원하는 TImageList.. 김상구.패패루 1195 2003/03/25
6989     제가 알기로는.... 박정모 975 2003/03/25
6990         Re: ^^ 그건 전통적인 아이콘 처리방식입니다. 김상구.패패루 1326 2003/03/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.