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

關於用陣列切割圖片的問題

尚未結案
kulala
一般會員


發表:3
回覆:6
積分:1
註冊:2004-04-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-27 22:12:03 IP:211.76.xxx.xxx 未訂閱
不好意思... 請問如何把一張灰階的圖片(不限大小,每次load的圖片都不一樣) 用陣列切割成一個個區塊(大小一樣) 然後再用亂數從裡面任意取出16個區塊呢??? 我現在只會load一張圖然後轉灰階而已 幫幫忙 感激不盡!!!謝謝!!! 以下是我目前的程式碼..請指教!!! void __fastcall TForm1::Button1Click(TObject *Sender) { Byte *ptr,Gray; int clRGB; if (OpenPictureDialog1->Execute()) { Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName); Image2->Picture->LoadFromFile(OpenPictureDialog1->FileName); } for (int y = 0; y < Image2->Picture->Height; y ) { for (int x =0;x< Image2->Picture->Width;x ) { clRGB =GetPixel(Image1->Canvas->Handle,x,y); clRGB=(GetRValue(clRGB) GetGValue(clRGB) GetBValue(clRGB))/3; Image2->Canvas->Pixels[x][y] = TColor(RGB(clRGB,clRGB,clRGB)); } } }
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-05 11:22:20 IP:220.139.xxx.xxx 未訂閱
您可以使用 Canvas 的 CopyRect() 的方式取得原圖的某一部分,如下:
TRect   MyFix, MySource;
MyFix = Rect(0,0,100,100); // 固定大小 100x100
MySource = Rect(100,100,200, 200); // 打算取原圖的 offset 100x100 位置起算的 100x100
Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
Bitmap->Width=100;
Bitmap->Height=100;
Bitmap->Canvas->CopyRect(MyFix, Image2->Canvas, MySource);
如此,這個 Bitmap 物件就有一個區塊的資料了,假設固定要 16 區塊,那就先宣告 16 個 TBitmap 物件,在每次載入圖作完灰階化後,再依上述方法(需要改變 MySource 的範圍,如果原圖分割不止 16 塊,則可以按您的亂數決定取那一塊,再按那一塊的範圍去改變 MySource 即可),分割原圖到這 16 個物件。 您也可以參考 CopyRect 的線上說明喔。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell.... 發表人 - dllee 於 2004/05/05 11:23:48
------
http://www.ViewMove.com
ekx
一般會員


發表:3
回覆:3
積分:1
註冊:2004-04-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-06 20:01:33 IP:61.222.xxx.xxx 未訂閱
您好 若是每次load的image大小都不同 而且分割的區塊大小都不同呢 比如說讓使用者自己選要load多大的圖(假設是320*240好了) 分區的大小也由使用者自己決定(比如說是8*8 ) 那要如何改寫 而且還有除不盡的問題要怎麼解決?? 謝謝
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-07 01:14:04 IP:211.76.xxx.xxx 未訂閱
引言: 您好 若是每次load的image大小都不同 而且分割的區塊大小都不同呢 比如說讓使用者自己選要load多大的圖(假設是320*240好了) 分區的大小也由使用者自己決定(比如說是8*8 ) 那要如何改寫 而且還有除不盡的問題要怎麼解決?? 謝謝
這就要看您的要求是什麼?分區的用意是什麼? 如果邊邊不是很重要,那除不盡也不必管取到有完整的分區即可。 如果都要由使用者指定,那您的分割區塊函式就要按使用者輸入的數值去分割就好。 例如: 圖寬 W 圖高 H 區塊寬 w 區塊高 h 水平分割數 W/w 假設邊邊不要那就是 W/w 取整數即可 如: int Wcount=W/w; 垂直分割數 H/h 假設邊邊不要那就是 H/h 取整數即可 如: int Hcount=H/h; 需要分割的 Rect 以下用 for loop 來表示
for(int i=0;i    沒空更新的網頁...
http://dllee.ktop.com.tw   C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org  介紹Shells,LiteStep,GeoShell....
        
------
http://www.ViewMove.com
kulala
一般會員


發表:3
回覆:6
積分:1
註冊:2004-04-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-12 15:15:25 IP:211.76.xxx.xxx 未訂閱
不好意思... 我依照您教的方法把圖切割(image1)好了‧ 那要怎樣把切完的圖顯示在另一張圖(image2)上呢? 謝謝您!!!
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-12 22:25:01 IP:211.76.xxx.xxx 未訂閱
引言: 不好意思... 我依照您教的方法把圖切割(image1)好了‧ 那要怎樣把切完的圖顯示在另一張圖(image2)上呢? 謝謝您!!! < face="Verdana, Arial, Helvetica"> 如果您要把 Image1 切下來的圖放到 Image2 顯示,可以把範例中的 Bitmap 改成 Image2,如:
TRect   MyFix, MySource;
MyFix = Rect(0,0,100,100); // 固定大小 100x100
MySource = Rect(100,100,200, 200); // 打算取原圖的 offset 100x100 位置起算的 100x100
Image2->Canvas->CopyRect(MyFix, Image1->Canvas, MySource);
用此方法,您可以畫在任何有提供 Canvas 屬性的元件,可以用來顯示或再處理。 原本我以為您會將切下來的圖作其他的運算,才會想說用 TBitmap 來存切下來的圖,而可以直接再用其 Bitmap->Canvas->Pixels[x][y] 對點處理,或是以 Bitmap->Scanline[y] 的方式快速處理。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
ekx
一般會員


發表:3
回覆:3
積分:1
註冊:2004-04-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-13 20:36:03 IP:61.222.xxx.xxx 未訂閱
您好 如何將image分區,宣告那一個範圍是第幾區 〈比如是300*300的image,一個區塊是10*10〉 然後再用亂數重排這些區塊,再show到image2上呢 那如何用seed來紀錄這些亂數,使得每次的亂數序列都一樣呢 謝謝
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-15 15:50:39 IP:211.76.xxx.xxx 未訂閱
請參考: ■【BCB】【發表】圖片分割,亂數排列 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=50139    沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
kulala
一般會員


發表:3
回覆:6
積分:1
註冊:2004-04-25

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