|
안녕하세요 해당화 입니다.
넵 요넘의 TPrinter에 내장되어 있는 StretchDraw() 나 또 머더라 그 다른 함수로 이미지를 인쇄하시게
되면 이미지가 출력이 될때 현재 모니터의 해상도를 따라서 출력이 되거나 또는 출력이 아예 안되거나
하는 현상이 생깁니다. 그래서 완벽하게 이미지를 인쇄하시고자 하시면 아래의 방법을 쓰셔야 합니다.
미리보기도 이런식으로 TImage에 Canvas에 뿌려줘서 구현하실거라면 그때는 그냥 StrethDraw를 사용하세요
요거 그냥 용지에 사용하시면 이상하게 나옵니다. 구럼 즐프하세요
bool __fastcall TFmPrinting::ImagePrint(TCanvas *SendCanvas, TImage *Image, TRect *rect)
{ //Image를 화면이나 용지에 인쇄한다..
BITMAPINFO * lpDIBHdr;
BYTE * lpDIBBits;
unsigned int ImageSize =0;
unsigned int HeaderSize =0;
Graphics::TBitmap *AssignBitmap = new Graphics::TBitmap();
AssignBitmap->Assign(Image->Picture->Graphic);
GetDIBSizes(AssignBitmap->Handle, HeaderSize, ImageSize);
if( HeaderSize ==0 || ImageSize == 0)
{
return false;
}
lpDIBBits = (BYTE *)malloc(ImageSize);
lpDIBHdr = (BITMAPINFO *) malloc(HeaderSize);
if( !GetDIB(AssignBitmap->Handle,
AssignBitmap->Palette,
lpDIBHdr, lpDIBBits) )
{
delete lpDIBBits;
delete lpDIBHdr ;
return false;
}
// Rectangle(Printer()->Canvas->Handle,20,20,200,200);
StretchDIBits(SendCanvas->Handle,
rect->Left, rect->Top,
rect->Right - rect->Left,
rect->Bottom - rect->Top,
0, 0,
AssignBitmap->Width,
AssignBitmap->Height,
lpDIBBits,
lpDIBHdr,
DIB_RGB_COLORS,
SRCCOPY);
free(lpDIBBits);
free(lpDIBHdr );
delete AssignBitmap;
return true; //인쇄성공여부
}
요렇게 해보세요 프린터에 인쇄가 아주 깔끔하게 잘될겁니다.
yhlee 님이 쓰신 글 :
: 안녕하십니까? 프린트문제가 저를 괴롭혀서 이렇게 글을 올립니다.
: 저의 프린트 루틴은 다음과 같습니다.
:
: if ( Printer()->Printers->Count <= 0 )
: return;
:
: PrintDialog1->Options.Clear();
: PrintDialog1->FromPage = 1;
: PrintDialog1->MinPage = 1;
: PrintDialog1->ToPage = pgcFormPage->PageCount;
: PrintDialog1->MaxPage = pgcFormPage->PageCount;
:
: if (PrintDialog1->Execute())
: {
: // 프린트 작업 시작
: Printer()->BeginDoc();
:
: // 현재폼의 bitmap을 얻지요..
: Graphics::TBitmap* bitmap = GetFormImage();
:
: TRect destR ;
: if ( Printer()->Orientation == poLandscape )
: {
: // 세로방향
: destR.Left = 0;
: destR.Top = 0;
: destR.Right = 6800 ;
: destR.Bottom = 4800 ;
: }
: else
: {
: // 가로방향
: destR.Left = 0;
: destR.Top = 0;
: destR.Right = 4800 ;
: destR.Bottom = 3000 ;
: } // end of if
: // 확대...
: Printer()->Canvas->StretchDraw(destR,bitmap) ;
:
: // 프린트 작업 끝..
: Printer()->EndDoc();
: } // end of if
:
: 그런데 window 2000에서는 잘됩니다. 그런데 98에서는 빈종이만 나오는군요..
: Printer()->Canvas->TextOut( 10, 10, "babo")를 하니 출력이 되는데 왜? bitmap으로는 출력이 안되죠..
: 답변부탁드립니다..
|