全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2659
推到 Plurk!
推到 Facebook!

TSelection 的操作問題

答題得分者是:JamesJuan
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-03-02 23:51:48 IP:118.160.xxx.xxx 未訂閱
請問各位!

有關 FiM2 的 TSelection 的用法, 不知各位有沒有使用上的實務經驗,
我已經查了一個星期的網路文, google, yahoo等 EMBD 對於 TSelection 的討論少的可憐, TSelectionPoint 也只有一篇,

我現在想用 TSelection 對於 Image 進行圖片的 Crop 功能,
我可以取得 TSelection的 Width, Height, Position,
但如何讓 Image 可以按我所設定的 Range 進行截取部份圖片,
TImage 我不是很懂
有 TImage.Bitmap.setsize, resize, Canvas 等等的提供,
不知各位可否提點一二,
感謝
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-03-03 18:56:33 IP:220.136.xxx.xxx 未訂閱
無意間在網路找到一篇討論timage的程式, 後來我發現

TImage.Width 及 TImage.Bitmap.Width 不一樣
假設在 TLayer 中放一個 TImage, 320*200, 然後 Loadfromfile 一個jpg圖檔, 可能有 1024*768,
這時讀取 timage.width = 320, 但如果讀取 timage.bitmap.width 並不是320, 也不是 1024, 可是會比 320大
而TSelection 是以螢幕的痤標在計算, 也就是如果 TSelection.width = 200, 就等於 TImage.Width=200
但TSelection.position.X =100 卻又不一定等於 Image.Posititon.x
雖然這些數據顯示似乎有一些關連可整理, 但又很難去分辨清楚
所以現在搞得我一個頭兩個大,

不知道對 TImage 有比較深入研究的前輩, 可否指點一二...

感恩~~
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-03-07 17:28:46 IP:220.134.xxx.xxx 訂閱
 這裡有視頻(但沒有源始碼)不過還是能參考:

v.youku.com/v_show/id_XNjgwNTg4NDY4.html
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2014-03-07 18:42:21 IP:118.160.xxx.xxx 未訂閱
這就是我要的, 其實這篇我也看過了, 但....

===================引 用 Main Chen 文 章===================
這裡有視頻(但沒有源始碼)不過還是能參考:

v.youku.com/v_show/id_XNjgwNTg4NDY4.html
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2014-03-24 15:58:49 IP:59.120.xxx.xxx 未訂閱
這個問題好像沒人解~~~
我有找到類似的, 但是是以delphi7寫的, 其中 用到 Canvas.strechDraw, 可惜在 xe5 已拿掉這個功能, 網路上說只能用 Canvas.DrawBitmap自已做, 但我不知如何下手?
JamesJuan
中階會員


發表:2
回覆:76
積分:80
註冊:2003-04-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2014-03-24 16:45:43 IP:59.127.xxx.xxx 未訂閱
PD 版大您好,

因為視頻我打不開,所以對於您的所需只好用猜的
假設您的需求是 ImageSource 載入一張圖片後,轉「畫」部分到 ImageTager 上

我是用一張 1920 * 1200 的圖片作測試
測試畫面如下



程式碼


其中 SourceRect 與 TargetRect 的資訊,視需要自行修改即可...
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2014-03-25 00:01:45 IP:118.160.xxx.xxx 未訂閱
James 您好:

按你提供的內容, 我實作後如下圖(左中右, 右為結果), 不知道那裡出問題了, 能否再向您請教一下, 謝謝!

程式碼如下
Image2 是已事位放置在畫面的元件, Image3是動態被建立的TBitmap, CropSelect 是 TSelection 元件
我是利用 image2先複製到 image3, 再利用 Image3 做 Crop 的功能, 然後傳回 image2


img3Rect := TRectF.Create(0,0,Image2.Bitmap.Width, Image2.Bitmap.Height);
img2Rect := TRectF.Create(CropSelect.Position.X, CropSelect.Position.Y,
CropSelect.Width,
CropSelect.Height);
Image3 := TBitmap.Create;
Image3.Assign(Image2.Bitmap);
Image2.Bitmap.Width := Trunc(CropSelect.Width);
Image2.Bitmap.Height := Trunc(CropSelect.Height);
if Image2.Canvas.BeginScene then
try
Image2.Bitmap.Canvas.DrawBitmap(Image3, img3Rect, img2Rect, 1);
finally
Image2.Canvas.EndScene;
end;
Image2.Bitmap.SaveToFile(fimg2);
Image3.Free;


P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2014-03-27 14:53:45 IP:118.169.xxx.xxx 未訂閱
已經找到方法解決了, 並釋放了程式
在此感謝各方大力協助, 尤其是 James提供的那段code, 給了很大的幫忙
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=105804


編輯記錄
P.D. 重新編輯於 2014-03-27 14:59:06, 註解 無‧
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

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