請問一下這個程序有什麼問題,為什麼沒有作用? |
答題得分者是:tick228
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
如題,下面的函式有什麼問題?
procedure TLakeEffectTntForm.LakeEffectDoFlipImage(MyBitmap: TBitmap; FlipMode: Integer; var MyImage: TsImage); var SRect, DRect: TRect; TempBitmap: TBitmap; BitmapWidth, BitmapHeight: Integer; begin with MyBitmap do begin BitmapWidth := Width; BitmapHeight := Height; DRect := Bounds(0, 0, BitmapWidth, BitmapHeight); end; case FlipMode of 0: // Vertical Flip begin SRect := Rect(0, BitmapHeight, BitmapWidth, 0); end; 1: // Horizontal Flip begin SRect := Rect(BitmapWidth, 0, 0, BitmapHeight); end; 2: // Both Flip begin SRect := Rect(BitmapWidth, BitmapHeight, 0, 0); end; end; TempBitmap := TBitmap.Create; try with TempBitmap do begin PixelFormat := pf24bit; Width := BitmapWidth; Height := BitmapHeight; Canvas.Draw(0,0, MyBitmap); MyImage.Picture.Bitmap.Canvas.CopyRect(DRect, TempBitmap.Canvas, SRect); end; finally TempBitmap.Free; end; end; |
tick228
高階會員 發表:1 回覆:47 積分:104 註冊:2003-11-03 發送簡訊給我 |
//
Canvas.Draw(0,0, MyBitmap); MyImage.Picture.Bitmap.Canvas.CopyRect(DRect, TempBitmap.Canvas, SRect); // 這兩行改成這樣試試 // Canvas.CopyRect(SRect, MyBitmap.Canvas, DRect); MyImage.Picture.Assign(TempBitmap); // |
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
tick228
高階會員 發表:1 回覆:47 積分:104 註冊:2003-11-03 發送簡訊給我 |
下列程式可正常運作, 參考看看
TRImage 可用 TImage 替代. SImg 要先讀入一 BMP 檔. ---------------------------- unit Unit43; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, RImage, StdCtrls, ExtCtrls; type TForm43 = class(TForm) Panel1: TPanel; Label1: TLabel; FlipModeCB: TComboBox; FlipBtn: TButton; SImg: TRImage; DImg: TRImage; procedure FlipBtnClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form43: TForm43; implementation {$R *.dfm} procedure FlipImage(SBitmap: TBitmap; DImage: TPicture; FlipMode: Integer); var SRect, DRect: TRect; TempBitmap: TBitmap; BitmapWidth, BitmapHeight: Integer; begin with SBitmap do begin BitmapWidth := Width; BitmapHeight := Height; SRect := Bounds(0, 0, BitmapWidth, BitmapHeight); end; case FlipMode of 0: // Vertical Flip DRect := Rect(0, BitmapHeight, BitmapWidth, 0); 1: // Horizontal Flip DRect := Rect(BitmapWidth, 0, 0, BitmapHeight); 2: // Both Flip DRect := Rect(BitmapWidth, BitmapHeight, 0, 0); end; TempBitmap := TBitmap.Create; try with TempBitmap do begin PixelFormat := pf24bit; Width := BitmapWidth; Height := BitmapHeight; Canvas.CopyRect(DRect, SBitmap.Canvas, SRect); DImage.Assign(TempBitmap); end; finally TempBitmap.Free; end; end; procedure TForm43.FlipBtnClick(Sender: TObject); begin FlipImage(SImg.Picture.Bitmap, DImg.Picture, FlipModeCB.ItemIndex); end; end. -------------------- |
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
我把元件重頭開始一律改成用官方元件後,用Delphi 10.3.3再編譯一次,執行結果是,無論我選擇什麼東西,目標圖像都不會變化。
===================引 用 stacker_liew 文 章=================== 為什麼我試了你的方案,執行結果郤是連原始圖像都變空白了? 原始程式和你所發表的一模一樣,除了DImage.Assign(TempBitmap)要改成DImage.Picture.Bitmap(TempBitmap)外,因為必須這樣改不然會造成執行期間錯誤。 |
tick228
高階會員 發表:1 回覆:47 積分:104 註冊:2003-11-03 發送簡訊給我 |
因為我的 DImage 是 TPicture, 所以可以直接 Assign.
而你的 DImage 是 TsImage, 必需取其 Picture 來 Assign. 我的 Flip function, 有修改 SRect/DRect 的使用, 你的 SRect/DRect 混用, 會混淆看程式的人. ===================引 用 stacker_liew 文 章=================== 為什麼我試了你的方案,執行結果郤是連原始圖像都變空白了? 原始程式和你所發表的一模一樣,除了DImage.Assign(TempBitmap)要改成DImage.Picture.Bitmap(TempBitmap)外,因為必須這樣改不然會造成執行期間錯誤。 |
tick228
高階會員 發表:1 回覆:47 積分:104 註冊:2003-11-03 發送簡訊給我 |
你直接複製使用我的 FlipImage(SBitmap: TBitmap; DImage: TPicture; FlipMode: Integer),
再使用 FlipImage(SImg.Picture.Bitmap, DImg.Picture, FlipModeCB.ItemIndex); 呼叫使用就可. 注意, 這個 function 只能處理 bitmap(.bmp) 圖檔, 若是 jpg 或 png 檔, 需先轉換成 bitmap 才能處理. ===================引 用 stacker_liew 文 章=================== 我把元件重頭開始一律改成用官方元件後,用Delphi 10.3.3再編譯一次,執行結果是,無論我選擇什麼東西,目標圖像都不會變化。 ===================引 用 stacker_liew 文 章=================== 為什麼我試了你的方案,執行結果郤是連原始圖像都變空白了? 原始程式和你所發表的一模一樣,除了DImage.Assign(TempBitmap)要改成DImage.Picture.Bitmap(TempBitmap)外,因為必須這樣改不然會造成執行期間錯誤。
編輯記錄
tick228 重新編輯於 2019-12-03 09:17:26, 註解 無‧
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
是因為JPEG圖檔的原因嗎?
===================引 用 stacker_liew 文 章=================== 我改成和你一模一樣的方案了,用官方元件,執行程式沒反應。 |
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
我改成用Bitmap圖檔載入,現在目標圖像變成白色一片。
===================引 用 stacker_liew 文 章=================== 是因為JPEG圖檔的原因嗎? ===================引 用 stacker_liew 文 章=================== 我改成和你一模一樣的方案了,用官方元件,執行程式沒反應。 |
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |