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

델파이 Q&A
Delphi Programming Q&A
[15930] Re:[질문]tif 확장자를 불러오려고 합니다. 여러장의 이미지가 존재합니다...
빌더(TWx) [builder] 245 읽음    2017-09-05 13:09
화니 님이 쓰신 글 :
: 안녕하세요~
: 이미지 image 컴포넌트를 사용하여 파일이미지들을 표시해주는 단순한
: 것을 만들어 사용하려고 하는데요
: 당황스럽게  tif 확장자 파일이 있는데 파일하나에 여러장이 저장이되어져 있네요
: 아무리 해봐도 첫장만 표시가 되어지네요 며칠을 해보다가 질의 남겨 봅니다.
: 여러장인 경우 어찌 표시 할수 있는 방법이 있는지 혹 하신 분들 도움 부탁드립니다...
: 감사합니다.~



답변:


VCL도 라이브러리 내부적으로는 Windows OS가 제공하는 WIC API를 사용합니다.

procedure TWICImage.LoadFromStream(Stream: TStream);
var
  LStream: IStream;
  BitmapDecoder: IWICBitmapDecoder;
  LBitmapFrame: IWICBitmapFrameDecode;
  LGUID: TGUID;

  procedure WicCheck(Result: HRESULT);
  begin
    if Failed(Result) then
      raise EInvalidGraphic.Create(SInvalidImage);
  end;
begin
  FreeAndNil(FBitmap);

  FData.Clear;
  FData.CopyFrom(Stream, Stream.Size - Stream.Position);
  FData.Position := 0;
  LStream := TStreamAdapter.Create(FData);

  WicCheck(FImagingFactory.CreateDecoderFromStream(LStream, guid_null, WICDecodeMetadataCacheOnDemand, BitmapDecoder));
  WicCheck(BitmapDecoder.GetContainerFormat(LGUID));
  EncoderContainerFormat := LGUID;
  WicCheck(BitmapDecoder.GetFrame(0, LBitmapFrame));
  WicCheck(FImagingFactory.CreateBitmapFromSource(LBitmapFrame, WICBitmapCacheOnLoad, FWicBitmap));
  WicCheck(FWicBitmap.GetSize(FWidth, FHeight));

  FFormatChanged := False;
end;


확장자 tiff 이미지 파일일 경우, TWICImage 클래스로 바인딩 하는데...
위의 VCL 소스코드를 보면 알 수 있듯이 OS의 WIC  API를 이용하고 있고...

VCL은 무조건 첫번째 프레임만 처리하고 멀티플 이미지에 대해선 코드를 따로 구현해 놓고 있지 않습니다.
위의 TWICImage.LoadFromStream()를 수정해서 처리하든가 하면 되겠죠. ( GetFrame() WIC COM API )

컴포넌트에만 의존하고... API 찾아 볼 생각도 안하고 VCL 소스코드도 안예 안보나요?

+ -

관련 글 리스트
15929 [질문]tif 확장자를 불러오려고 합니다. 여러장의 이미지가 존재합니다... 화니 189 2017-08-31
15931     Re:[질문]tif 확장자를 불러오려고 합니다. 여러장의 이미지가 존재합니다... 무념 216 2017-09-06
15930     Re:[질문]tif 확장자를 불러오려고 합니다. 여러장의 이미지가 존재합니다... 빌더(TWx) 245 2017-09-05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.