|
이윤성 님이 쓰신 글 :
: TRect R;
:
: if(PrintDialog->Execute()){
: TPrinter *Ptr = Printer();
: R = Rect(0, 0, Image->Picture->Width , Image->Picture->Height );
: Ptr->BeginDoc();
: Ptr->Canvas->StretchDraw(R, Image->Picture->Graphic);
: Ptr->EndDoc();
: }
:
: 이렇게 출력을 하면 이미지가 상당히 작게 나오네요..
: 폼에서 보이는 이미지 랑..프린터기가 인식하는 거랑 차이가 상당히 많이 나는거 같은데..
: 어쩌면 당연한지도 모르겠네요..
: 이 걸 실제 싸이즈 랑 비슷하게 출력 할려면 어떻게 해야 할까요?
: Print 에서 인식하는 A4 가로 세로 싸이즈가 얼마인가요?
: 대략 저 폭에 *7 정도로 하면....눈에 보이는 거랑 비슷한 싸이즈 인거 같은데..
: 그건 문제가 있고..
: .
: int XPI = GetDeviceCaps(Ptr->Handle,LOGPIXELSX);
: int YPI = GetDeviceCaps(Ptr->Handle,LOGPIXELSY);
: 이렇게 해서 프린터의 출력의 가로 세로를 안다고 나오는거 같은데 이다음에..여기에 어떤수를 나누거나 하면 좀더 정확한 싸이즈를 구할수 있을지 조언 부탁 드립니다.
:
:
: 그리고 Ptr->NewPage(); 로 해서 여러장 인쇄시.. 프리터출력시 문서 범위에서..
: 한장 또는 전체 출력 옵션 선택할려면 어떻게 해야 하는지 잘안되네요..
: 여러장 해놓으면...옵션상에서 전체 출력만 가능하네요...
LOGPIXELSX Number of pixels per logical inch along the screen width.
LOGPIXELSY Number of pixels per logical inch along the screen height.
디바이스마다 DPI(Dot Per Inch)가 다를 수 있습니다.
다시말해, 디바이스마다 동일한 1인치에 찍는(찍을 수 있는) 점의 갯수가 다를 수 있습니다.
이것을 해당 장치의 해상도(RESolution)라 합니다.
보통, 프린터의 해상도가 모니터의 해상도 보다 훨씬 높습니다.
따라서, 모니터에서 크게 보이던 것이 그대로 인쇄하면 작게 출력되는 것입니다.
모니터에 보이는 크기만하게 인쇄하려면,
'프린터의 해상도 나누기 모니터의 해상도'의 비율만큼 확대해서 출력하면 됩니다.
BOOL StretchBlt(
HDC hdcDest, // handle of destination device context
int nXOriginDest, // x-coordinate of upper-left corner of dest. rect.
int nYOriginDest, // y-coordinate of upper-left corner of dest. rect.
int nWidthDest, // width of destination rectangle
int nHeightDest, // height of destination rectangle
HDC hdcSrc, // handle of source device context
int nXOriginSrc, // x-coordinate of upper-left corner of source rectangle
int nYOriginSrc, // y-coordinate of upper-left corner of source rectangle
int nWidthSrc, // width of source rectangle
int nHeightSrc, // height of source rectangle
DWORD dwRop // raster operation code
);
nWidthDest를 nWidthSrc*(프린터해상도/모니터해상도)로 해줍니다.
nHeightDes도 마찬가지입니다.
|