Q&A

  • Bitmap이미지 출력을 어떻게?
Bitmap이미지를 출력하려는데요,

BitMap를 제대로 얻어서 Width와 Height도 이상없이 듬직한데,

그냥 찍으면 된다고 해서 그냥 찍었더니.

아글쎄 A4에 쥐똥만하게 나오잖아요.

어케하는지요. 공식적인 프로젝트 진행중이라서 잘 해야 하거들랑요.

도와주세요.



여기전까진 Printer의 셋팅 값들이 모두 정상이고,

Printer.BeginDoc;

printer.Canvas.Draw(

{요건 용지의 중앙에 나오게 하려고}

(Printer.PageWidth - Bitmap.Width) div 2,

(Printer.PageHeight - Bitmap.Height) div 2,

Bitmap);

Printer.EndDoc;



2  COMMENTS
  • Profile
    박홍석 1999.09.17 07:09
    싸나이 wrote:

    > Bitmap이미지를 출력하려는데요,

    > BitMap를 제대로 얻어서 Width와 Height도 이상없이 듬직한데,

    > 그냥 찍으면 된다고 해서 그냥 찍었더니.

    > 아글쎄 A4에 쥐똥만하게 나오잖아요.

    > 어케하는지요. 공식적인 프로젝트 진행중이라서 잘 해야 하거들랑요.

    > 도와주세요.

    >

    > 여기전까진 Printer의 셋팅 값들이 모두 정상이고,

    > Printer.BeginDoc;

    > printer.Canvas.Draw(

    > {요건 용지의 중앙에 나오게 하려고}

    > (Printer.PageWidth - Bitmap.Width) div 2,

    > (Printer.PageHeight - Bitmap.Height) div 2,

    > Bitmap);

    > Printer.EndDoc;

    >

    안녕하세요. 홍세빕니다.

    아래 코드처럼 사이즈를 정해주고 출력해보세요.

    var

    FRec : TRect; // 그림이 나타날 영역

    begin

    printer.begindoc;

    try

    SetMapMode(printer.canvas.handle,MM_LOMETRIC);

    FRec.Left := 300;

    FRec.Top := 300;

    FRec.Right := 1000;

    FRec.Bottom := 1000;

    Printer.Canvas.StretchDraw(FRec, Image1.Picture.Graphic);

    Printer.EndDoc;

    except

    Printer.Abort;

    raise;

    end;

    end;

  • Profile
    안치봉 1999.09.17 02:53
    프린터와 모니터의 해상도는 많은 차이가 있습니다. 일반적으로 프린터의 해상도가 더 높습니다. 그러므로 그림이 그렇게 쥐똥(?) 만하게 나오는 겁니다.



    프린터와 모니터의 해상도를 구해서 적절하게 비트맵을 키워줘야 합니다.

    예를 들어 프린터가 모니터보다 해상도가 3배 높다면 그림을 3배 키워 인쇄를 하면 되겠죠.



    아래에 간단한 예제... Win32 API 의 예제..



    The following example shows the code required to print a string of text and a bitmapped image. The string of text, centered at the top of the page, identifies the path and filename for the file that contains the bitmapped image. The bitmapped image, centered vertically and horizontally on the page, is drawn so that the same proportions used to draw the image in the application's window are maintained.



    /*

    * Initialize the members of a DOCINFO

    * structure.

    */



    di.cbSize = sizeof(DOCINFO);

    di.lpszDocName = "Bitmap Printing Test";

    di.lpszOutput = (LPTSTR) NULL;

    di.lpszDataType = (LPTSTR) NULL;

    di.fwType = 0;



    /*

    * Begin a print job by calling the StartDoc

    * function.



    */



    nError = StartDoc(pd.hDC, &di);

    if (nError == SP_ERROR) {

    errhandler("StartDoc", hwnd);

    goto Error;

    }



    /*

    * Inform the driver that the application is

    * about to begin sending data.

    */



    nError = StartPage(pd.hDC);

    if (nError <= 0) {



    errhandler("StartPage", hwnd);

    goto Error;

    }



    /*

    * Retrieve the number of pixels-per-logical-inch

    * in the horizontal and vertical directions

    * for the display upon which the bitmap

    * was created.

    */



    fLogPelsX1 = (float) GetDeviceCaps(pd.hDC, LOGPIXELSX);

    fLogPelsY1 = (float) GetDeviceCaps(pd.hDC, LOGPIXELSY);







    /*

    * Retrieve the number of pixels-per-logical-inch

    * in the horizontal and vertical directions

    * for the printer upon which the bitmap

    * will be printed.

    */



    fLogPelsX2 = (float) GetDeviceCaps(pd.hDC,

    LOGPIXELSX);

    fLogPelsY2 = (float) GetDeviceCaps(pd.hDC,

    LOGPIXELSY);





    /*

    * Determine the scaling factors required to

    * print the bitmap and retain its original

    * proportions.

    */



    if (fLogPelsX1 > fLogPelsX2)

    fScaleX = (fLogPelsX1 / fLogPelsX2);

    else

    fScaleX = (fLogPelsX2 / fLogPelsX1);



    if (fLogPelsY1 > fLogPelsY2)

    fScaleY = (fLogPelsY1 / fLogPelsY2);



    else

    fScaleY = (fLogPelsY2 / fLogPelsY1);



    /*

    * Compute the coordinate of the upper left

    * corner of the centered bitmap.

    */



    cWidthPels = GetDeviceCaps(pd.hDC, HORZRES);

    xLeft = ((cWidthPels / 2) -

    ((int) (((float) bmih.biWidth)

    * fScaleX)) / 2);

    cHeightPels = GetDeviceCaps(pd.hDC, VERTRES);



    yTop = ((cHeightPels / 2) -

    ((int) (((float) bmih.biHeight)

    * fScaleY)) / 2);



    /*

    * Create a memory DC that is compatible with

    * the printer and select the bitmap (which

    * the user requested) into this DC.

    */



    hdcMem = CreateCompatibleDC(pd.hDC);



    if (!SelectObject(hdcMem, hbm))



    errhandler("SelectObject Failed", hwnd);





    /*

    * Use the StretchBlt function to scale the

    * bitmap and maintain its original proportions

    * (that is, if the bitmap was square when it

    * appeared in the application's client area,

    * it should also appear square on the page).

    */





    if (!StretchBlt(pd.hDC, xLeft, yTop,



    (int) ((float) bmih.biWidth * fScaleX),

    (int) ((float) bmih.biHeight * fScaleY),

    hdcMem, 0, 0,

    bmih.biWidth, bmih.biHeight,

    SRCCOPY))

    errhandler("StretchBlt Failed", hwnd);





    /* Delete the memory DC. */



    DeleteDC(hdcMem);



    /*

    * Retrieve the width of the string that



    * specifies the full path and filename for the

    * file that contains the bitmap.

    */



    GetTextExtentPoint32(pd.hDC, ofn.lpstrFile,

    ofn.nFileExtension + 3,

    &szMetric);



    /*

    * Compute the starting point for the

    * text-output operation. The string will

    * be centered horizontally and positioned



    * three-lines down from the top of the page.

    */



    xLeft = ((cWidthPels / 2) - (szMetric.cx / 2));

    yTop = (szMetric.cy * 3);



    /*

    * Print the path and filename for the bitmap,

    * centered at the top of the page.

    */



    TextOut(pd.hDC, xLeft, yTop, ofn.lpstrFile,

    ofn.nFileExtension + 3);





    /*

    * Determine whether the user has pressed

    * the Cancel button in the AbortPrintJob

    * dialog box; if the button has been pressed,

    * call the AbortDoc function. Otherwise, inform

    * the spooler that the page is complete.

    */



    nError = EndPage(pd.hDC);



    if (nError <= 0) {

    errhandler("EndPage", hwnd);



    goto Error;

    }



    /* Inform the driver that document has ended. */



    nError = EndDoc(pd.hDC);

    if (nError <= 0)

    errhandler("EndDoc", hwnd);



    Error:

    /* Enable the application's window. */



    EnableWindow(hwnd, TRUE);



    /* Remove the AbortPrintJob dialog box. */



    DestroyWindow(hdlgCancel);





    /* Delete the printer DC. */



    DeleteDC(pd.hDC);





    싸나이 wrote:

    > Bitmap이미지를 출력하려는데요,

    > BitMap를 제대로 얻어서 Width와 Height도 이상없이 듬직한데,

    > 그냥 찍으면 된다고 해서 그냥 찍었더니.

    > 아글쎄 A4에 쥐똥만하게 나오잖아요.

    > 어케하는지요. 공식적인 프로젝트 진행중이라서 잘 해야 하거들랑요.

    > 도와주세요.

    >

    > 여기전까진 Printer의 셋팅 값들이 모두 정상이고,

    > Printer.BeginDoc;

    > printer.Canvas.Draw(

    > {요건 용지의 중앙에 나오게 하려고}

    > (Printer.PageWidth - Bitmap.Width) div 2,

    > (Printer.PageHeight - Bitmap.Height) div 2,

    > Bitmap);

    > Printer.EndDoc;

    >

    • 박형진
    • 1999.09.18 02:13
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.09.18 02:23
      델파이에서 작성된 프로그램은 어떠한 DLL도 필요없습니다. 하지만 만약 델파이로 데이타베이스 어플리...
    • camplus
      1999.09.18 20:37
      델에 포함되어있는 인스톨쉴드 익스프레스를 사용하세요.. 좀더 고급적인 기능을 원하신다면 인스톨쉴드 ...
    • 이상준
    • 1999.09.18 01:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.09.18 02:20
      컴포트를 직접 제어하실 줄 아신다면 그냥 전화걸기 스트링을 보내시면 됩니다. ATDT + 전화번호 + ^M ...
    • 신호성
      1999.09.18 18:32
      임병우 wrote: > 안녕하세요.. > 엑셀로 된 우편번호.xls 를 sql6.5로 import할려고 했는데 7.0은 기능이...
    • 구창민
      1999.09.17 20:09
      유시니 wrote: > A 드라이브가 3.5인치 인지 5.25인치 인지 디스켓이 없어도 판별할수 있나요? 유시니...
    • 맹주형
    • 1999.09.17 19:45
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 맹주형
      1999.09.18 23:51
      맹주형 wrote: > > 안녕하세요.. > DBGrid 와 Query를 사용하여 데이터를 삽입하고, 정렬하는 문제인...
    • mute
      1999.09.18 00:28
      맹주형 wrote: > > 안녕하세요.. > DBGrid 와 Query를 사용하여 데이터를 삽입하고, 정렬하는 문제인...
    • 박홍석
      1999.09.17 20:11
      맹주형 wrote: > > 안녕하세요.. > DBGrid 와 Query를 사용하여 데이터를 삽입하고, 정렬하는 문제인...
    • 최수영
      1999.09.18 17:03
      서지훈 wrote: > 알려 주세요.. > 제발.. 크리스탈레포트 7.0에는 기본으로 제공되는 기능이지죠.. 이...
    • 윤상식
    • 1999.09.17 18:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 해마지
      1999.09.22 02:25
      윤상식 wrote: > 안녕하세요. > 저는 모뎀을 이용해서 전화를 건 후 다이얼링중에 상대방이 전화를 받았...
    • 홍길동
    • 1999.09.17 10:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정계훈
      1999.09.18 02:11
      홍길동 wrote: > 델파이3.0의 BDE에 보면 > > Configuration/Drivers에서 > > Oracle Vendor init...
    • 정계훈
      1999.09.18 02:06
      이정현 wrote: > 안녕하세요... > > 쿼리시 특정 개수 만큼의 데이터를 가져오려면 어떻게 해야 ...
    • 황선희
      1999.09.27 20:34
      정계훈 wrote: > 이정현 wrote: > > 안녕하세요... > > > > 쿼리시 특정 개수 만큼의 데이터를 ...
    • 김민정
    • 1999.09.17 05:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.09.17 10:55
      일단 묶는방법은 이렇게 하시면 됩니다. 온라인상에서 작성하는 코드라 수정이 필요할 수 있습니다. fu...
    • 초보
    • 1999.09.17 05:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 강민주
      1999.09.17 07:35
      초보 wrote: > dbgrid에서 각 record의 각 컬럼의 색깔을 다른게 칠하는 방법은 없나요 ? > > dbgrid1...
    • 최재원
      2000.01.22 19:40
      수고 많으십니다. 우하하, 왕초보입니다. 자세히 갈켜 주신데로 했는데요, 변하질 않아요.. 헐 i...
    • 강태완
    • 1999.09.17 04:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
      1999.12.03 20:31
      강태완 wrote: > > [질문1]gif animation 화일을 델파이 이미지 컴포넌트로 불러오는 방법을 알고자 ...
    • 이정욱
      1999.09.18 16:00
      첫번째에 대한 답변을 드리죠~ ^^ Gif 컴포넌트를 한델 자료실에 오늘 다시 업로드 해놓았습니다. 받...
    • David
    • 1999.09.17 02:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 표경나
      1999.09.22 05:08
      David wrote: > 안녕하십니까? > > 이런 Component는 없습니까? > > 즉, Panel과 Panel을 연결하는 ...
    • 안치봉
      1999.09.17 04:19
      굳이 쓰스자면 CGI 를 만들때 써먹을수가 있습니다. ISAPI 같은것... 곽경래 wrote: > 안녕하세요....
    • 이철수
    • 1999.09.17 04:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.09.17 04:21
      그림을 보여주는 방법은 아시겠죠? Timer를 사용하시면 됩니다. 1000 인터벌이 1초라고 생각하시고 ...
    • 싸나이
    • 1999.09.17 01:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박홍석
      1999.09.17 07:09
      싸나이 wrote: > Bitmap이미지를 출력하려는데요, > BitMap를 제대로 얻어서 Width와 Height도 이상없이 ...
    • 안치봉
      1999.09.17 02:53
      프린터와 모니터의 해상도는 많은 차이가 있습니다. 일반적으로 프린터의 해상도가 더 높습니다. 그러므로 ...
    • sjd
      1999.09.17 18:38
      김경아 wrote: > 현재 델파이 4.0으로 개발을 하고 있습니다. 그런데 퀵레포트를 1번이상 > 실행을 하면 ...
    • 이재식
      1999.09.17 18:33
      그런 경우는 흔한 경우입니다. 사실 보아야 정확히 알 수 있지만, 대략 설명으로 판단해보면 이런경우중...