線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1327
推到 Plurk!
推到 Facebook!

如何把列印的結果存成影像檔(BMP)

尚未結案
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-25 22:12:28 IP:163.29.xxx.xxx 未訂閱
各位前輩大家好:
  小弟想把輸出到雷射列印機(600dpi)的結果轉存影像檔(BMP),
那我該如何做?之前小弟用TPrinter之Canvas(畫布)下的功能嘗試,
可是却失敗,不曉得是我的方法不對,亦或是觀念上有問題,請先進
們指點迷津,謝謝大家!
發表人 - g6101 於 2003/12/25 22:18:59
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-31 15:36:10 IP:61.218.xxx.xxx 未訂閱
 
    Graphics::TBitmap *BMP;
    TQRUnit StoredUnits;        QuickRep1->Prepare();
    StoredUnits = QuickRep1->Units;
    QuickRep1->Units = Pixels;       try
   {
        BMP = new Graphics::TBitmap();          for ( i =1 ; i <= QuickRep1->QRPrinter->PageCount; i   )
      {                BMP->Width = QuickRep1->Page->Width;
            BMP->Height = QuickRep1->Page->Length;                QuickRep1->QRPrinter->PageNumber = i;
            BMP->Canvas->Draw (0, 0, QuickRep1->QRPrinter->Page );
      }
   }
   __finally
   {
        delete BMP;
        PrintQuotationQR->QuickRep1->Units = StoredUnits;
   }    
CuteBabyBoy
初階會員


發表:18
回覆:97
積分:48
註冊:2003-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-31 19:36:24 IP:218.167.xxx.xxx 未訂閱
我有另一招...要不要參考看看 我會先存成 temp.bmp or temp.jpg 再去做 print 的動作 Baby
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-03 23:07:55 IP:163.29.xxx.xxx 未訂閱
感謝海星、CuteBabyBoy 大大所提供的方法及意見:    (一)我依照海星您所提供方法經小弟測試結果發現,TQuickRep元件所能生成影像是Preview用的解析度很低,不符合我的需求(歹勢,我並沒有把需求給講清楚,害您白忙一場,600dpi以上解析度才能夠用於排版用途),或許有其他方法可以取出高解析度影像,不過小弟納悶的是既然有低解析度,何以沒有高解度的影像?一定是我的方法不對,還請大大解惑!    (二)我採納CuteBabyBoy大大意見,直接用TImage元件成生簡單的排列組合,並將程式碼貼上,供各位參考看看,還有沒有更好的方法:    LOGFONT LogFont;
TPrinter *print = Printer();
//=================================
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   char *str = "倚天屠龍,誰與爭鋒。";
   char ss[3];
   int len = strlen(str);
   int x,y=0;       //設定影像高/寬(從印表機(A4)紙張取得,單位Pixel)
   Image1->Picture->Bitmap->Width = print->PageWidth;
   Image1->Picture->Bitmap->Height = print->PageHeight;       //設定拷貝影像的尺寸
   TRect MyRect = Rect(0,0,Image1->Picture->Bitmap->Width,Image1->Picture->Bitmap->Height);       //設定排列字體解析度(從印表機取得)
   Image1->Picture->Bitmap->Canvas->Font->PixelsPerInch = GetDeviceCaps(print->Handle,LOGPIXELSX);
   Image1->Picture->Bitmap->Canvas->Font->Name = "標楷體";  //字體
   Image1->Picture->Bitmap->Canvas->Font->Size = 72;        //大小
   GetObject(Image1->Picture->Bitmap->Canvas->Font->Handle,sizeof(LOGFONT),&LogFont);
   LogFont.lfEscapement = 0;  //旋轉度
   LogFont.lfOutPrecision = OUT_TT_ONLY_PRECIS; //品質
   Image1->Picture->Bitmap->Canvas->Font->Handle = CreateFontIndirect(&LogFont);
   Image1->Picture->Bitmap->Canvas->Brush->Style = bsClear;       //以直式排列文字
   x = Image1->Picture->Bitmap->Width;
   for (int i=0;i < len ;i  = 2)
   {
     //memset(ss,0,sizeof(ss));
     ss[0] = str[i];
     ss[1] = str[i 1];
     Image1->Picture->Bitmap->Canvas->TextOut(x - Image1->Picture->Bitmap->Canvas->TextWidth("ss"),y,ss);
     y  = Image1->Picture->Bitmap->Canvas->TextHeight(ss);
   }       print->BeginDoc();
   //將影像拷貝到印表機
   print->Canvas->CopyRect(MyRect,Image1->Picture->Bitmap->Canvas,MyRect);
   print->EndDoc();
}    //存成影像檔的動作省略
//以上扺做文字的排列組合,實際上還要排上表格、圖表、影像..等等的組合
系統時間:2024-04-19 21:07:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!