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

如何判斷 TImage is empty

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


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2016-10-18 22:53:08 IP:118.169.xxx.xxx 未訂閱
請問各位:

我要判斷 Image1.Bitmap 是否為空的,
雖然有提供 Image1.Bitmap.Clear() 及 Image1.Bitmap.isEmpty
但現在的問題是

一開始使用 Image1.Bitmap.Isempty 是可以偵測為 True
但如果我做了 I.Bitmap1.Assing(...) 之後, 再下 Clear 清空, 回頭測 IsEmpty = False
我也嘗試了以下的可能性

利用 Bitmap.SetSize(0,0)
或 Bitmap.ReSize(0,0)
或 利用一個 Image2 (空的) Assign 給 Image1
但都沒有用
不知還有沒有其他方法可以讓 Image1 真的清空?

謝謝!
kuraki5336
一般會員


發表:10
回覆:19
積分:20
註冊:2010-06-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2016-10-20 18:26:43 IP:114.46.xxx.xxx 未訂閱
image1.Bitmap := nil; 

這樣可以
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2016-10-20 22:09:04 IP:61.224.xxx.xxx 未訂閱
這個方法我試過, 透過 Image1.Bitmap.isEmpty 無法回傳 True值
kuraki5336
一般會員


發表:10
回覆:19
積分:20
註冊:2010-06-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2016-10-21 09:06:48 IP:125.224.xxx.xxx 未訂閱
我把檔案放這邊 

https://goo.gl/photos/MfqV9BStC17sTNL59

我是用這個有成功。用你說的clear 就不行
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2016-10-21 09:44:00 IP:61.224.xxx.xxx 未訂閱
更正, 是我誤會了

我有兩個 TBitmap 的元件, 一個是 xe 內建的 TImage, 另一個是 第三方控件的, 不是TImage, 而是屬 TBtimap 屬性

Image1.Bitmap := nil 確實可行
但我那個元件(TMS FMX 元件, 是一個可執行簽名的 Image 元件), 用 xxxx := nil 無法編譯, 錯誤是右方為唯讀, 不能指定,
而我要判斷的是這個簽名Image 是否有簽名, 有的話才指給 Image, 沒有的話提警告, 所以目前是找不到方法可以偵測這個元件 Bitmap是否為空, 不過是TMS的元件, 因為沒人可以解答了吧!
我也試過 Create 一個 Image (Image1.Bitmap := TBitmap.Create),
再 assign 給這個元件, 也無法判斷是空的....
只好在另外想其他可能的方法吧!
kuraki5336
一般會員


發表:10
回覆:19
積分:20
註冊:2010-06-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2016-10-21 10:35:27 IP:125.224.xxx.xxx 未訂閱
我自行解決了。
http://delphi.ktop.com.tw/board.php?cid=30&fid=1501&tid=106712
剛好看到你們之前的討論串。

突發奇想地把 【Resource】裡面的那個0-default給砍掉。就成功地引用了。


他目前 【Resource】 會有兩個 0-default 、1-Windows10 Backgroud [這名稱應該是看你OS哪一個版本]....

我在想應該跟我Form指定的資源檔有關。晚些研究到底是哪邊要調整在分享。
當然直接砍到0-Default 也行


leveon
資深會員


發表:30
回覆:386
積分:303
註冊:2012-02-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2016-10-21 10:43:01 IP:1.161.xxx.xxx 未訂閱
不是都有原碼?追一下 isempty 是用甚麼來判斷不就得了?
sryang
尊榮會員


發表:38
回覆:742
積分:876
註冊:2002-06-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2016-10-22 00:12:36 IP:59.127.xxx.xxx 未訂閱
我的想法很簡單,就是把空白的圖片內容做個 MD5 保留下來,需要比較時就把目前圖片內容做個 MD5,比較兩者若相同就是空白
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
tick228
中階會員


發表:1
回覆:28
積分:55
註冊:2003-11-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2016-10-22 02:42:33 IP:101.9.xxx.xxx 未訂閱
如果沒有 TMS 的 SOURCE 可以判斷如何判別, 那就用最笨但也是最準確的方式: 判斷圖片是否都是同一顏色.

取四角落其中一點的顏色當基準色,
使用 ScanLine 一點一點判斷顏色是否相同,

要快速, 只要判斷到有一點不同, 就判定有簽名, 但誤判率高;
要求準確, 統計不同顏色點數, 用比例來判別是否有簽名, 但速度慢.
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2016-10-23 10:58:16 IP:118.169.xxx.xxx 未訂閱
感謝各位給予的指導, 
經過這次的設計, 對 TImage 有更多的了解, 發現

1. Clear() 不是清空, 因為它只是將一個顏色填充整個 Image, 並不是我們想的是清除圖像
2. IsEmpty 也不是我們想像中的"空白", IsEmpty 是判斷 bitmap width or height = 0
3. Bitmap=nil , 利用 IsEmpty 才能取得 True 值

不過這幾天都在想辦法要達到我要的目的, 所以嚴格說起來, 這帖的主旨下的不恰當,
因為我有兩個 Image, 一個是標準的 TImage, 一個是 TMS 的 Signature 的簽名元件(TBitmap)
我利用 Signature 元件進行簽名後, 要導到 TImage 儲存, 也就是當簽名有內容時(就是有實際寫下簽名的動作), 導入到 TImage中, 如果沒有簽名, 或清掉原簽名, 就要把 TImage 清空, 一直在判斷 Signature 卡關, 無法判斷這個Bitmap 是否有簽名
所以主旨應該下, 如何判斷 TBitmap 有圖像才比較切題

這幾天的研究下來, 終於找到一個方法且實證可行, 就是我設置一個 MemTable(用 FireDac, kbm均可), 裡面有兩個欄位都是 Blob 的型態
在 Form Create 時, 先儲入 Signature 空的Bitmap到 Blob1
在 簽名後, 存入到 Blob2 欄位
再利用 TBlobField(xxxxxx).BlobSize 來比對兩個欄位大小, 如果一樣的話, 代表簽名後的Bitmap是空的, 就指定 Image1.Bitmap := nil, 如果不是, 則 Image1.Bitap.Assing(Signature) , 至少到目前為止可以達成我要的目的,
所以再次感謝各方指導
系統時間:2017-12-15 16:25:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!