關於用陣列切割圖片的問題 |
尚未結案
|
kulala
一般會員 發表:3 回覆:6 積分:1 註冊:2004-04-25 發送簡訊給我 |
不好意思...
請問如何把一張灰階的圖片(不限大小,每次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 發送簡訊給我 |
您可以使用 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 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: 您好 若是每次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://www.ViewMove.com |
kulala
一般會員 發表:3 回覆:6 積分:1 註冊:2004-04-25 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: 不好意思... 我依照您教的方法把圖切割(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 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
請參考:
■【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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |