본문 바로가기
Delphi Tip/출력

델파이 인쇄 출력 8편

by MonoSoft 2023. 9. 5.
728x90
반응형

델파이 인쇄 출력

728x90

 

 

 

 

 

그림 출력하기

 

사실 델파이에서 그림을 인쇄하는 일을 아주 쉽습니다.

 

그냥 그림출력함수나

Canvas.Draw 또는 Canvas.StretchDraw 만 가지고도 그릴 수 있습니다.

 

그러나 몇 가지 문제가 있습니다.

 

윈도를 16컬러로 세팅이 되어있는 상태에서 트루컬러로 되어있는

그림을 출력하면 그림은 자동으로 16컬러로 변환되어 그려집니다.

 

아주 몰골이 되고말지요~ 이유는 간단합니다.

 

출력을 할때 파레트를 따로 처리해 주지 않으면

자동으로 시스템의 파레트가 적용이 되기때문입니다.

 

그럼 어케 하느냐~

 

파레트를 원래 그림이 가지고 있는 색으로 적용시켜서 출력을 하면 됩니다.

 

그렇게 할 수 있는 API함수가 있는데 바로 StretchDIBits입니다.

 

다음 예제는 StretchDIBits를 이용해서 비트맵을 출력하는 예입니다.

 

StretchDIBits의 앞부분은 StretchDIBits를 사용하기위해서

인자값들을 준비하는 부분이므로 StretchDIBits함수 한 개만

잘 사용할 줄 알면 되겠습니다.

 

// 이 루틴은 TForm.Print 메소드를 수정한것입니다.

procedure PrintBmp( ARect: TRect; ABitmap: TBitmap );

var

  Info: PBitmapInfo;

  InfoSize: DWORD;

  Image: Pointer;

  ImageSize: DWORD;

  Bits: HBITMAP;

  DIBWidth, DIBHeight: Longint;

begin

  with Printer, Canvas do

  begin

    Bits := ABitmap.Handle;

    GetDIBSizes( Bits, InfoSize, ImageSize );

    Info := AllocMem( InfoSize );

 

    try

      Image := AllocMem( ImageSize );

      try

        GetDIB( Bits, ABitmap.Palette, Info^, Image^ );

        with Info^.bmiHeader do

        begin

        DIBWidth := biWidth;

        DIBHeight := biHeight;

        end;

 

        StretchDIBits( Printer.Canvas.Handle,

                                 ARect.Left,

                                 ARect.Top,

                                 ARect.Right,

                                 ARect.Bottom,

                                 0,

                                 0,

                                 DIBWidth,

                                 DIBHeight,

                                 Image,

                                 Info^,

                                 DIB_RGB_COLORS,

                                 SRCCOPY );

      finally

        FreeMem( Image, ImageSize );

      end;

    finally

      FreeMem( Info, InfoSize );

    end;

  end;

end;

728x90
반응형

'Delphi Tip > 출력' 카테고리의 다른 글

델파이 인쇄 출력 10편  (0) 2023.09.07
델파이 인쇄 출력 9편  (0) 2023.09.06
델파이 인쇄 출력 6편  (0) 2023.09.04
델파이 인쇄 출력 5편  (0) 2023.09.01
델파이 인쇄 출력 4편  (0) 2023.08.30

댓글