|
자 처음부터 이야기를 다시 해야겠군요..
이미지 화일에는 많은 포맷이 존재하지요?
그것의 궁극적인 목적은 용량은 작으면서 화질은 최대한 유지 하는것입니다. ( 압축 )
(절대적인 목적은 아닙니다. 벡터화라던지 다른이유도 있긴 합니다.)
그리고 위와같은 이유로 수많은 포맷이 있지요.
하지만 변하지 않는점은 화면에 그림을 그리기 위해서는
순수한 데이타가 필요합니다. 압축되지 않은 화일이죠.
그럼 GraphicEX 이것은 무엇이냐..
이건 압축을 풀어주기만 하는 라이브러리 입니다.
예를 들어 jpg 는 zip 화일이라고 생각하시고
GraphicEX를 사용해서 jpg의 압축을 푸시면
화면에다가 뿌려줄수 있는 데이타가 나온다고 생각하세요.
( 이게 압축안된 BMP화일이라고 생각하시면 됩니다. 용량 무지 크지요? )
( 그리고 보통 래스터(raster)한다고 하더군요 )
그럼 화면은 어떻게 보이게 하느냐.
이건 이미 빌더에 포함되어 있습니다 TImage 이죠. 외부 컴포넌트로 Graphic32도 있습니다.
이것들은 raster된 순수 이미지를 받아들여 화면에 뿌려주고 조작할 수 있게 해주는 라이브러리입니다.
고로 결론이자 핵심은
-> GraphicEX로 압축 풀고
-> TImage등의 컴포넌트를 폼등에 집어넣고
-> 압축풀린 데이타를 TImage에게 넘겨준다..
그럼 어떻게 넘겨주느냐!
/* 폼 위에 TImage 컴포넌트를 올려놓았고 그것의 Object Inspector(?)->name 속성이 "img" 라고 했을때. */
TPNGGraphic *png = new TPNGGraphic();
png->LoadFromFile("야시시.png"); /* 여기서 압축이 풀리게됨 */
img->Assign(png); /* img 는 png로부터 압축안된 순수 데이타를 넘겨받는다 */
delete png;
이렇게 하시면 되겠습니다 @_@;
( 단순 이 4줄을 보여줄려고 이런 소리를 늘어놨냐고 돌날라오지는 않을지 ^^; )
/* 그리고 확실한 에러 처리를 위해서라면 이런방식을 써 보시는 것도 괜찮을거 같습니다 */
/* 이게 정석이라고는 말하지 않겠습니다 ^^; */
#include <memory>
try{
auto_ptr<TPNGGraphic> png(new TPNGGraphic());
png->LoadFromFile("야시시2.png");
img->Assign(png.get());
}
catch(Exception &e) {
Messege~~~
}
이렇게 하시면 어떤 경우에라도 new를 통해 할당된 메모리가 새는 일은 막으실 수 있습니다.
|