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

請問一下這個程序有什麼問題,為什麼沒有作用?

答題得分者是:tick228
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2019-11-26 20:09:03 IP:1.32.xxx.xxx 未訂閱
如題,下面的函式有什麼問題?

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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2019-11-27 00:09:21 IP:39.10.xxx.xxx 未訂閱
//
Canvas.Draw(0,0, MyBitmap);
MyImage.Picture.Bitmap.Canvas.CopyRect(DRect, TempBitmap.Canvas, SRect);
//
這兩行改成這樣試試
//
Canvas.CopyRect(SRect, MyBitmap.Canvas, DRect);
MyImage.Picture.Assign(TempBitmap);
//
編輯記錄
tick228 重新編輯於 2019-11-27 00:13:04, 註解 無‧
tick228 重新編輯於 2019-11-27 00:16:34, 註解 無‧
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2019-12-01 03:38:33 IP:60.53.xxx.xxx 未訂閱
還是一樣沒作用。
tick228
高階會員


發表:1
回覆:47
積分:104
註冊:2003-11-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2019-12-02 08:35:09 IP:27.52.xxx.xxx 未訂閱
下列程式可正常運作, 參考看看
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2019-12-03 01:58:47 IP:60.48.xxx.xxx 未訂閱
謝謝,等等來去試看看。
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2019-12-03 07:56:18 IP:60.48.xxx.xxx 未訂閱
為什麼我試了你的方案,執行結果郤是連原始圖像都變空白了?

原始程式和你所發表的一模一樣,除了DImage.Assign(TempBitmap)要改成DImage.Picture.Bitmap(TempBitmap)外,因為必須這樣改不然會造成執行期間錯誤。
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2019-12-03 09:04:25 IP:60.48.xxx.xxx 未訂閱
我把元件重頭開始一律改成用官方元件後,用Delphi 10.3.3再編譯一次,執行結果是,無論我選擇什麼東西,目標圖像都不會變化。
===================引 用 stacker_liew 文 章===================
為什麼我試了你的方案,執行結果郤是連原始圖像都變空白了?

原始程式和你所發表的一模一樣,除了DImage.Assign(TempBitmap)要改成DImage.Picture.Bitmap(TempBitmap)外,因為必須這樣改不然會造成執行期間錯誤。
tick228
高階會員


發表:1
回覆:47
積分:104
註冊:2003-11-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2019-12-03 09:04:49 IP:27.52.xxx.xxx 未訂閱
因為我的 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2019-12-03 09:13:01 IP:27.52.xxx.xxx 未訂閱
你直接複製使用我的 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2019-12-03 10:36:56 IP:60.48.xxx.xxx 未訂閱
原來如此,難怪,因為我的圖像正是JPEG,請問一下有什麼函式可以JPEG轉Bitmap嗎?
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#11 引用回覆 回覆 發表時間:2019-12-03 10:37:50 IP:60.48.xxx.xxx 未訂閱
我找到J2B了,來去試看看。
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#12 引用回覆 回覆 發表時間:2019-12-03 10:47:23 IP:60.48.xxx.xxx 未訂閱
請問一下我之前用JPEG圖載入至TImage中,原始圖像也看到該圖檔了,那Source Image裡面是Bitmap還是JPEG呢?
我是用Design Time載入的,不是用Run Time載入的。
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#13 引用回覆 回覆 發表時間:2019-12-03 10:49:43 IP:60.48.xxx.xxx 未訂閱
直接用你的函會得到Cannot assing a TBitmap to a TImage
還是要改一下Assign部份嗎?
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#14 引用回覆 回覆 發表時間:2019-12-03 11:21:21 IP:60.48.xxx.xxx 未訂閱
我改成和你一模一樣的方案了,用官方元件,執行程式沒反應。
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#15 引用回覆 回覆 發表時間:2019-12-03 11:22:17 IP:60.48.xxx.xxx 未訂閱
是因為JPEG圖檔的原因嗎?
===================引 用 stacker_liew 文 章===================
我改成和你一模一樣的方案了,用官方元件,執行程式沒反應。
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#16 引用回覆 回覆 發表時間:2019-12-03 11:33:39 IP:60.48.xxx.xxx 未訂閱
我改成用Bitmap圖檔載入,現在目標圖像變成白色一片。
===================引 用 stacker_liew 文 章===================
是因為JPEG圖檔的原因嗎?
===================引 用 stacker_liew 文 章===================
我改成和你一模一樣的方案了,用官方元件,執行程式沒反應。
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#17 引用回覆 回覆 發表時間:2019-12-03 15:26:44 IP:60.48.xxx.xxx 未訂閱
可以了,謝謝。
系統時間:2024-11-21 17:17:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!