델파이 인쇄 출력
그림 출력하기
사실 델파이에서 그림을 인쇄하는 일을 아주 쉽습니다.
그냥 그림출력함수나
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;
'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 |
댓글