MetaFile轉成JPG檔過程中出現Out of system resources |
答題得分者是:GrandRURU
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
各位前輩大家好:
小弟目前有支程式 其中有個功能是將DataSet的資料匯出Excel後 在將Excel的資料轉換成圖片(存成JPG檔) 在試寫過程中得知 從Excel轉換出來的為T M e t aFile 所以轉換過程大概為T M e t aFile→BMP→JPG 然後有參考以下連結: delphi.ktop.com.tw/board.php 但在Run的過程中會出現 "Out of system resources." 的錯誤訊息 經Debug後 錯誤是錯在 Bmp.Width := MetaFile.Width; Bmp.Height := MetaFile.Height; 這兩行上 因為是第一次寫有關圖檔的轉換 所以對這方面不太熟 只能照本宣科的做 不知大大們這問題要如何處理呢? 以下是Code: [code delphi] var JPG: TJPEGImage; BMP: TBitmap; M etafile: T M e t afile; begin try //從Excel中轉換出MetaFile檔 //....... //過程 //....... //開始轉成圖檔 M etafile := TM etafile.Create; M etafile.Assign(ClipBoard); Bmp := TBitmap.Create; Bmp.Width := M etaFile.Width; Bmp.Height := M etaFile.Height; Bmp.Canvas.Draw(0, 0, M etaFile) ; JPG := TJPEGImage.Create; JPG.CompressionQuality := 50; JPG.Assign(Bmp); JPG.SaveToFile('C:\test.jpg'); finally JPG.Free; Bmp.Free; M etafile.Free; end; end; [/code] |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
請參閱:convert a Bitamp to a emf (Enhanced Metafile)?
===================引 用 老大仔 文 章=================== 各位前輩大家好: 小弟目前有支程式 其中有個功能是將DataSet的資料匯出Excel後 在將Excel的資料轉換成圖片(存成JPG檔) 在試寫過程中得知 從Excel轉換出來的為T M e t aFile 所以轉換過程大概為T M e t aFile→BMP→JPG 然後有參考以下連結: delphi.ktop.com.tw/board.php 但在Run的過程中會出現 "Out of system resources." 的錯誤訊息 經Debug後 錯誤是錯在 Bmp.Width := MetaFile.Width; Bmp.Height := MetaFile.Height; 這兩行上 因為是第一次寫有關圖檔的轉換 所以對這方面不太熟 只能照本宣科的做 不知大大們這問題要如何處理呢? 以下是Code: [code delphi] var JPG: TJPEGImage; BMP: TBitmap; M etafile: T M e t afile; begin try //從Excel中轉換出MetaFile檔 //....... //過程 //....... //開始轉成圖檔 M etafile := TM etafile.Create; M etafile.Assign(ClipBoard); Bmp := TBitmap.Create; Bmp.Width := M etaFile.Width; Bmp.Height := M etaFile.Height; Bmp.Canvas.Draw(0, 0, M etaFile) ; JPG := TJPEGImage.Create; JPG.CompressionQuality := 50; JPG.Assign(Bmp); JPG.SaveToFile('C:\test.jpg'); finally JPG.Free; Bmp.Free; M etafile.Free; end; end; [/code] |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
沒有寫過Excel to WMF / Clipboard
所以沒辦法完整的實作 (小弟才疏學淺,莫怪) 但還是可以找到一些頭緒: How to convert WMF to BMP Creating WMF file format and placing it to clipboard! 實作的範例如下: [code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Clipbrd, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Image1: TImage; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { Usage: ConvertWMF2BMP('c:\mypic.wmf','c:\mypic.bmp') } procedure ConvertWMF2BMP (const WMFFileName, BMPFileName: TFileName) ; var MetaFile : TMetafile; Bitmap : TBitmap; begin Metafile := TMetaFile.Create; Bitmap := TBitmap.Create; try MetaFile.LoadFromFile(WMFFileName) ; with Bitmap do begin Height := Metafile.Height; Width := Metafile.Width; Canvas.Draw(0, 0, MetaFile) ; SaveToFile(BMPFileName) ; end; finally Bitmap.Free; MetaFile.Free; end; end; function bmp2emf(const SourceFileName: TFileName): Boolean; // Converts a Bitmap to a Enhanced Metafile (*.emf) var Metafile: TMetafile; MetaCanvas: TMetafileCanvas; Bitmap: TBitmap; begin Result := False; Metafile := TMetaFile.Create; try Bitmap := TBitmap.Create; try Bitmap.LoadFromFile(SourceFileName); Metafile.Height := Bitmap.Height; Metafile.Width := Bitmap.Width; MetaCanvas := TMetafileCanvas.Create(Metafile, 0); try MetaCanvas.Draw(0, 0, Bitmap); finally MetaCanvas.Free; end; finally Bitmap.Free; end; Metafile.SaveToFile(ChangeFileExt(SourceFileName, '.emf')); Result := True; finally Metafile.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var Bitmap : TBitmap; begin Bitmap := TBitmap.Create; if Clipboard.HasFormat(CF_BITMAP) then begin Image1.Picture.Bitmap.Assign(Clipboard); Image1.Picture.SaveToFile('c:\123.bmp') ; end; Bitmap.Free; end; procedure TForm1.Button2Click(Sender: TObject); begin bmp2emf('c:\123.bmp'); end; procedure TForm1.Button3Click(Sender: TObject); begin ConvertWMF2BMP('c:\123.emf','c:\223.bmp'); end; end. [/code]
編輯記錄
GrandRURU 重新編輯於 2013-06-18 10:09:33, 註解 無‧
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
回 GrandRURU 大大:
其實我是先照以下連結中的方法二做 tw.myblog.yahoo.com/alice-jca/article 然後又靈機一動 把這些動作錄下來 再自行轉成Delphi的語法 慢幔try 以下是大至轉換內容: [code delphi] try Excel := CreateOleObject('EXCEL.APPLICATION'); //中間過程就不再贅述了 //重點是這句↓ Excel.Selection.CopyPicture(Appearance:=xlScreen, Format:=xlBitmap); if Clipboard.HasFormat(CF_BITMAP) then begin try if Bmp <> nil then Bmp := nil; Bmp := TBitmap.Create; Bmp.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0); JPG := TJPEGImage.Create; JPG.Assign(Bmp); JPG.SaveToFile('C:\test.jpg'); ClipBoard.Clear; finally JPG.Free; Bmp.Free; end; end; finally Excel.Application.DisplayAlerts := False; Excel.WorkBooks[1].SaveAs(aFileName); Excel.WorkBooks.Close; Excel.Quit; end; [/code] ===================引 用 GrandRURU 文 章=================== 請問……Excel是怎麼轉成圖片的呢? ===================引 用 老大仔 文 章=================== 謝謝 GrandRURU 大大提供的方式 我後來有試出來 錯誤原因是我在將Excel轉為圖片的這個動作時 應該要選用Bitmap而不是用Picture的方式 假如轉換出來是Picture的話好像就會有問題 但假如用Bitmap就不會有問題 然後接下來就是用TBitmap來接 再轉為JPEG就可以了~
編輯記錄
老大仔 重新編輯於 2013-06-24 07:43:21, 註解 無‧
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
太厲害了!
給你一個讚! ===================引 用 老大仔 文 章=================== 回 GrandRURU 大大: 其實我是先照以下連結中的方法二做 tw.myblog.yahoo.com/alice-jca/article 然後又靈機一動 把這些動作錄下來 再自行轉成Delphi的語法 慢幔try 以下是大至轉換內容: [code delphi] try Excel := CreateOleObject('EXCEL.APPLICATION'); //中間過程就不再贅述了 //重點是這句↓ Excel.Selection.CopyPicture(Appearance:=xlScreen, Format:=xlBitmap); if Clipboard.HasFormat(CF_BITMAP) then begin try if Bmp <> nil then Bmp := nil; Bmp := TBitmap.Create; Bmp.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0); JPG := TJPEGImage.Create; JPG.Assign(Bmp); JPG.SaveToFile('C:\test.jpg'); ClipBoard.Clear; finally JPG.Free; Bmp.Free; end; end; finally Excel.Application.DisplayAlerts := False; Excel.WorkBooks[1].SaveAs(aFileName); Excel.WorkBooks.Close; Excel.Quit; end; [/code] ===================引 用 GrandRURU 文 章=================== 請問……Excel是怎麼轉成圖片的呢? ===================引 用 老大仔 文 章=================== 謝謝 GrandRURU 大大提供的方式 我後來有試出來 錯誤原因是我在將Excel轉為圖片的這個動作時 應該要選用Bitmap而不是用Picture的方式 假如轉換出來是Picture的話好像就會有問題 但假如用Bitmap就不會有問題 然後接下來就是用TBitmap來接 再轉為JPEG就可以了~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |