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

[BCB]如何將處理好的結果存回圖片

答題得分者是:richtop
chemichemi
一般會員


發表:5
回覆:5
積分:2
註冊:2005-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-08 00:04:01 IP:219.68.xxx.xxx 未訂閱
我將一張640*480的BMP圖片依照bgr的順序存入img[640*480*3]的陣列 經過K-means程式運算後將圖片上的PIXEL分成三群 現在我想把三群塗成不同的顏色 以便讓使用者能用肉眼看出分群的方式 我在分群完成後 已經將矩陣img的內容類似改成如下: [255,255,255,0,0,0,128,128,128,255,255,255,128,128,128..................]    那請問我要如何將結果寫回圖片呢    懇請各位指點一下 小弟是程式新手
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-08 08:22:06 IP:140.117.xxx.xxx 未訂閱
站上已經有過許多的討論了 多多利用站上已經討論過的文章 就可以發現答案^^ 例如 http://delphi.ktop.com.tw/topic.php?topic_id=48922
chemichemi
一般會員


發表:5
回覆:5
積分:2
註冊:2005-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-08 11:51:04 IP:219.68.xxx.xxx 未訂閱
小弟參考過後將程式撰寫如下:    Byte *ptr; int count=0;  for(j=0;jHeight;j ) { ptr = (Byte *)Tbmp->ScanLine[j]; for(i=0;i<(Tbmp->Width)*3;i ) { ptr[i]=img[count]; count ; } } Image1->Picture->Assign(Tbmp); 可是程式跑出來的分群塗上不同色的結果似乎有問題
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-08 20:32:41 IP:211.76.xxx.xxx 未訂閱
chemichemi 您好:    插個花! 因為您處理的是全彩格式,所以要明確設定PixelFormat,參考一下!    
引言: 小弟參考過後將程式撰寫如下:
Byte *ptr;
int count=0;
int RED=2, GREEN=1, BLUE=0;
Tbmp->PixelFormat = pf24bit; // try to add this line.
 for(j=0;j< Tbmp->Height;j  )
 {
  ptr = (Byte *)Tbmp->ScanLine[j];
        for(i=0;i<(Tbmp->Width)*3;i =3)
        {
           
           ptr[i RED  ]=img[count RED  ];
           ptr[i GREEN]=img[count GREEN];
           ptr[i BLUE ]=img[count BLUE ];
           count =3;
        }
 }
 Image1->Picture->Assign(Tbmp);    可是程式跑出來的分群塗上不同色的結果似乎有問題

 
< face="Verdana, Arial, Helvetica">    RichTop 敬上    =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====#####    發表人 - richtop 於 2005/05/09  01:07:00
        
chemichemi
一般會員


發表:5
回覆:5
積分:2
註冊:2005-03-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-08 23:50:29 IP:219.68.xxx.xxx 未訂閱
感謝各位的回覆,我想我問題描述的不是很清楚 我現在想要把一個大小為640*480*3的一維矩陣,存回一張640*480的BMP圖片 (因為用Byte方式讀取BMP圖檔,每個Pixel會依照b,g,r的順序讀取) 我利用程式運算將此一維矩陣的每個值做過改變之後 要如何用Byte的方式存回BMP呢 再次麻煩各位<(_ _)>
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-09 01:03:39 IP:211.76.xxx.xxx 未訂閱
chemichemi 您好: 如果您的意思是:不知道該用什麼順序寫回資料的話,請參考前一回覆的修正! RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-09 01:11:20 IP:140.117.xxx.xxx 未訂閱
引言: --------------------------------------------------------------------------------    小弟參考過後將程式撰寫如下:    
Byte *ptr;
int count=0;
int RED=2, GREEN=1, BLUE=0;
Tbmp->PixelFormat = pf24bit; // try to add this line.你的BMP格式
 for(j=0;j< Tbmp->Height;j  )
 {
  ptr = (Byte *)Tbmp->ScanLine[j];
        for(i=0;i<(Tbmp->Width);i  )
        {
           
           ptr[i RED  ]=img[count RED  ]; //相當於你所宣告的[640][480][1]
           ptr[i GREEN]=img[count GREEN]; //相當於你所宣告的[640][480][2]               ptr[i BLUE ]=img[count BLUE ]; //相當於你所宣告的[640][480][3]               count =3;
        }
 }
 Image1->Picture->Assign(Tbmp);    
可是程式跑出來的分群塗上不同色的結果似乎有問題 -------------------------------------------------------------------------------- 在幫richtop作一點點補充 發表人 -
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-09 09:13:33 IP:210.68.xxx.xxx 未訂閱
引言:可是程式跑出來的分群塗上不同色的結果似乎有問題
因為i的範圍與richtop前輩所寫的不一樣
chemichemi
一般會員


發表:5
回覆:5
積分:2
註冊:2005-03-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-09 21:11:17 IP:219.68.xxx.xxx 未訂閱
再次感謝各位熱心的指導 我想我發現問題所在了    Byte *ptr1; int count=0; Tbmp->PixelFormat = pf24bit; for(j=0;jHeight;j ) { ptr1 = (Byte *)Tbmp->ScanLine[j]; for(i=0;iWidth;i ) { ptr1[i*3]=(Byte)groupnum[count]; count=count 3; } } Image1->Picture->Assign(Tbmp);
系統時間:2024-05-13 15:09:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!