討論區快速選單
知識庫快速選單
我的IT職涯該如何規劃 ? 政府補助!資策會APP就業班
[ 回上頁 ] [ 討論區發言規則 ]
在BCB中,如何把圖片相加
更改我的閱讀文章字型大小
作者 : akino0910(小蛙)
[ 貼文 43 | 人氣 8021 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/17 下午 04:59:30
請問各位好手
最近開始接觸BCB,對很多東西還是剛起步的地步...
覺得BCB跟VC差很多...
我要問的事BCB跟影像之間的關係
我用Button去開圖(設定了3個Button)
按Button1時圖片出現在image1
按Button2時圖片出現在image1
按Button3時圖片出現在image1
最後我想要再設定一個Button4去指定開的3張影像做相加的動作
(這裡又延生ㄧ個問題....我按Button2時,image1的圖片會依我指定所顯示,可是我再重新案Button1時又要重新指定ㄧ次圖片><....)
可是Button4裡面的程式我卻不知道該如何動手....
它是否跟VCㄧ樣?
可是圖片不是有灰階值的問題?
煩請各位高手幫我剛接觸的新手做個解答的動作><
小弟感激不盡.....^^
ps:希望有程式^^
作者 : jonay(jonay) VC++優秀好手C++ Builder優秀好手C++優秀好手貼文超過500則
[ 貼文 887 | 人氣 8025 | 評價 5030 | 評價/貼文 5.67 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/17 下午 06:22:24
>>按Button1時圖片出現在image1
>>按Button2時圖片出現在image1
>>按Button3時圖片出現在image1
>>可是Button4裡面的程式我卻不知道該如何動手....
Button4:
執行
Button1->Click();//先將載入的圖形存在一份記憶體(不顯示)->資料轉移至畫面image1
Button2->Click();//同上
Button3->Click();//同上
進行三份記憶體的圖形像素合併->將結果轉移至畫面


>>ps:希望有程式^^
麻煩先自行寫一段程式,其它人才好修改
總不能幫你無中生有吧
作者 : crazystar(CrazyStar) C++ Builder優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 449 | 人氣 17326 | 評價 2260 | 評價/貼文 5.03 | 送出評價 89 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/17 下午 06:28:12
不知你所謂的相加是指?
若第一張圖的第一個點為 a(0,0), 第二張圖的第一個點為 b(0,0), 第三張的為 c(0,0),
則第四張的第一個點為 a(0,0) + b(0,0) +c(0,0)? 這樣像有點奇怪呢.
作者 : sttsai(阿達達)
[ 貼文 13 | 人氣 257 | 評價 170 | 評價/貼文 13.08 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/19 上午 01:00:55
for(int i=0;i<pic_height;i++){
     for(int j=0;j<pic_width;j++) {

     r1=GetRValue(Image1->Canvas->Pixels[i][j]);
     g1=GetGValue(Image1->Canvas->Pixels[i][j]);
     b1=GetBValue(Image1->Canvas->Pixels[i][j]);

     r2=GetRValue(Image2->Canvas->Pixels[i][j]);
     g2=GetGValue(Image2->Canvas->Pixels[i][j]);
     b2=GetBValue(Image2->Canvas->Pixels[i][j]);

     r3=GetRValue(Image3->Canvas->Pixels[i][j]);
     g3=GetGValue(Image3->Canvas->Pixels[i][j]);
     b3=GetBValue(Image3->Canvas->Pixels[i][j]);

     r4=(r1+r2+r3)/3;
     g4=(g1+g2+g3)/3;
     b4=(b1+b2+b3)/3;

     Image4->Canvas->Pixels[i][j]=TColor(RGB(r4,g4,b4));

     }
     }

上面的code沒有Compiler過,
不過相關的API是正確地~~~
請慢用~~~~
作者 : ghost_liao(ghost) 貼文超過200則人氣指數超過10000點
[ 貼文 367 | 人氣 13998 | 評價 1230 | 評價/貼文 3.35 | 送出評價 94 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/23 下午 02:23:27
關於bcb與影像處理的資料
再儒林出版社有一本本雹很好用的書籍
以下為他的網路資料
SIM-898 C++ Builder 與影像處理 黃文吉 290
本書簡介:

     本書的主要目的是討論視窗程式在影像處理上的應用。視窗程式設計是發展應用程式的基礎,而影像處理則為多媒體系統的基本技術,本書將兩者結合,進而讓讀者了解基本多媒體應用系統的發展技術。

     我們使用C++Builder作為發展視窗程式設計的工具,C++Builder的主要優點是入門容易,一般的初學者很快便能掌握此一工具來完成視窗程式設計。雖然假設讀者已有C及C++的基本知識,本書仍從頭開始討論C++Builder之操作方式,並特別強調與影像處理相關元件的使用。

     本書之編寫,是以發展一影像處理軟體為主軸,而該軟體除了具有讀、寫以及顯示影像等基本功能外,也具備了放大縮小、旋轉、剪接、繪圖、反白、增強對比以及低通濾波等的特別功能,我們在每一章都討論一個或數個功能的實現方式,因此在最後一章討論完畢後此一影像處理軟體便設計完成。我們同時將完整的程式碼附於附錄中以方便讀者參考。

~目 錄 ~

第一章 C++ Builder 簡介

第二章 選單及對話盒

第三章 工具列及狀態列

第四章 列表盒與選項鈕

第五章 點矩陣檔格式

第六章 基本數位影像剪貼技巧

第七章 在數位影像上執行簡單的繪圖

第八章 使用JPEG影像格式

第九章 選單及工具列的管理

第十章 具有多重視窗之影像處理系統

第十一章 反白及對比增強

第十二章 影像低通濾波

附錄A 完整的影像處理系統程式碼
作者 : akino0910(小蛙)
[ 貼文 43 | 人氣 8021 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/29 下午 11:44:56
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenPictureDialog1->Execute())
{
Image1->autoSize=true;
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
}
int nr,nc;
float **image1;
image1=(float**)malloc(nr*sizeof(float*));
for(int i=0;i<nr;i++)
{
image1[i]=(float*)malloc(nc*sizeof(float));
}
for(int i=0;i<nr;i++)
{
free((char*)image1[i]);
}}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(OpenPictureDialog1->Execute())
{
Image2->autoSize=true;
Image2->Picture->LoadFromFile(OpenPictureDialog1->FileName);
}
int nr,nc;
float **image2;
image2=(float**)malloc(nr*sizeof(float*));
for(int i=0;i<nr;i++)
{
image2[i]=(float*)malloc(nc*sizeof(float));
}
for(int i=0;i<nr;i++)
{
free((char*)image2[i]);
}}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(OpenPictureDialog1->Execute())
{
Image3->autoSize=true;
Image3->Picture->LoadFromFile(OpenPictureDialog1->FileName);
}
int nr,nc;
float **image3;
image3=(float**)malloc(nr*sizeof(float*));
for(int i=0;i<nr;i++)
{
image3[i]=(float*)malloc(nc*sizeof(float));
}
for(int i=0;i<nr;i++)
{
free((char*)image3[i]);
}}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
if(SavePictureDialog1->Execute())
{
Image1->Picture->SaveToFile(SavePictureDialog1->FileName);
}}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
int r1,r2,r3,r4;
int height,width;
for(int i=0;i<height;i++){
for(int j=0;j<width;j++) {
r1=Image1->Canvas->Pixels[i][j];
r2=Image2->Canvas->Pixels[i][j];
r3=Image3->Canvas->Pixels[i][j];
r4=(r1+r2+r3)/3;
Image4->Canvas->Pixels[i][j]=(TColor)r4;
}}}
感謝各位高手的答覆,這是我的程式,可是相加後的圖形是空白的ㄧ張圖,而且變小很多><
作者 : akino0910(小蛙)
[ 貼文 43 | 人氣 8021 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/29 下午 11:47:49
麻煩各位高手再幫看依下程式哪裡出了問題....
我原本是想要用一張image1就能開所有的圖的...可是卻不得其門而入><
小弟衷心的感謝各位^^
作者 : crazystar(CrazyStar) C++ Builder優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 449 | 人氣 17326 | 評價 2260 | 評價/貼文 5.03 | 送出評價 89 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/30 下午 01:28:49
>麻煩各位高手再幫看依下程式哪裡出了問題....
我覺得很奇怪, 很多變數都是宣告後 (還沒有設定值) 就直接使用了. 這樣程式的結果一定不正確嘛, 例如在 Button5Click 中:

  int height,width; // 宣告變數height 及width
  for(int i=0;i<height;i++) // 請問height 的值為何?
  {
     ....
  }

你的程式結果會不正確, 我想應該就是因為個問題所導致的.
因為若沒有設定初值給變數, 則其值可能是一個隨機產生的亂數.
建議改成:
  height=Image1->Height;
  width=Image1->Width;

又, 若使用者所指定的三張圖的大小不一樣 (例, 圖1的寛高為100 & 100, 圖二為200 & 200, 圖三為100 & 200), 那請問你要怎麼相加?
建議你加入一個判斷式, 如下:
  if ((Image1->Width!=Image2->Width) && (Image1->Width!=Image3->Width) )
  {
     ShowMessage("Error: Image size not the same!");
     return;
  }

  if ((Image1->Height!=Image2->Height) && (Image1->Height!=Image3->Height) )
  {
     ShowMessage("Error: Image size not the same!");
     return;
  }
作者 : akino0910(小蛙)
[ 貼文 43 | 人氣 8021 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/30 下午 03:09:15
我昨天知道為何是出現空白的ㄧ個小桌布了,
改成RGB後就變成我要的圖形...
問題又來了><....
如果我開的是512*512的圖三張...
執行相加的結果....它只相加105*105的小張圖...也只顯現105*105...
怎麼會這樣,我有把image4寫成autosize=true
煩請各位高手指點迷津....小弟感激不盡><
以夏是我Button5裡的程式
int r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4;
int height,width;
height=Image1->Height;
width=Image1->Width;
for(int i=0;i<height;i++){
for(int j=0;j<width;j++) {

r1=GetRValue(Image1->Canvas->Pixels[i][j]);
g1=GetGValue(Image1->Canvas->Pixels[i][j]);
b1=GetBValue(Image1->Canvas->Pixels[i][j]);

r2=GetRValue(Image2->Canvas->Pixels[i][j]);
g2=GetGValue(Image2->Canvas->Pixels[i][j]);
b2=GetBValue(Image2->Canvas->Pixels[i][j]);

r3=GetRValue(Image3->Canvas->Pixels[i][j]);
g3=GetGValue(Image3->Canvas->Pixels[i][j]);
b3=GetBValue(Image3->Canvas->Pixels[i][j]);

r4=(r1+r2+r3)/3;
g4=(g1+g2+g3)/3;
b4=(b1+b2+b3)/3;
Image4->autoSize=true;
Image4->Canvas->Pixels[i][j]=TColor(RGB(r4,g4,b4));
作者 : sttsai(阿達達)
[ 貼文 13 | 人氣 257 | 評價 170 | 評價/貼文 13.08 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/31 下午 01:23:32
height=Image1->Height;
width=Image1->Width;
上面的寫法是取得Image1在Form上的大小,

請改用
height=Image1->Picture->Height;
width=Image1->Picture->Width;
即可

Image1->Picture 代表你所載入的圖片

請慢用~~~
作者 : akino0910(小蛙)
[ 貼文 43 | 人氣 8021 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/7 下午 04:52:53
首先感謝各位的鼎力相助^^
小弟不才....問題一個接著一個來ㄚ~~
還望各位高手能夠錦囊相助><

以下是我ㄧ個button裡的程式....
我想要把三張圖的各個var算出來...接著再去把每個像素作比較動作....
取最大的像素放在新的ㄧ張圖...
最後得到image4
可是我的程式我不知道哪裡出了問題....座鄉家動作卻和我用vc去做模尼的結果不同
我等等在下一篇會貼上我做相加動作的程式碼....
希望各位高手能幫我解答....

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenPictureDialog1->Execute())
{
Image1->autoSize=true;
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
}
Byte *ptr, *tptr, *uptr, *dptr;
int up, down, left, right, sum;
int sumv=0,max_v=0,min_v=100000,var=0;
Graphics::TBitmap *TheBitmap, *TempBitmap;
TheBitmap=Image1->Picture->Bitmap;

TempBitmap=new Graphics::TBitmap();
TempBitmap->Assign(TheBitmap);
for (int y=0;y<TheBitmap->Height;y++)
 {
 up=y-1;
 down=y+1;
 if (up<0) up=TheBitmap->Height-1;
if(down==TheBitmap->Height) down=0;
 ptr=(Byte*)TheBitmap->ScanLine[y];
 tptr=(Byte*)TempBitmap->ScanLine[y];
 uptr=(Byte*)TempBitmap->ScanLine[up];
 dptr=(Byte*)TempBitmap->ScanLine[down];
 for (int x=0;x<TheBitmap->Width;x++)
 {
  left=x-1;
  right=x+1;
  if (left<0) left=TheBitmap->Width-1;
  if (right==TheBitmap->Width) right=0;
  sum=(int)(uptr[left]+uptr[x]+uptr[right]+
     tptr[left]+tptr[x]+tptr[right]+
     dptr[left]+dptr[x]+dptr[right]);
  ptr[x]=(Byte)(sum/9);
  sumv+=(pow((uptr[left]+uptr[x]+uptr[right]+
     tptr[left]+tptr[x]+tptr[right]+
     dptr[left]+dptr[x]+dptr[right])-ptr[x],2));
   var=sumv;
if(var>max_v)
   max_v=var;
if(var<min_v)
   min_v=var;
   TempBitmap->Canvas->Pixels[x][y]=var;
  }
 }
TheBitmap->Assign(TempBitmap);
delete TempBitmap;
}
作者 : akino0910(小蛙)
[ 貼文 43 | 人氣 8021 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/7 下午 04:54:43
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Graphics::TBitmap *TheBitmap, *TempBitmap;
TheBitmap=Image4->Picture->Bitmap;
TempBitmap=new Graphics::TBitmap();
TempBitmap->Assign(TheBitmap);
int height,width;
height=Image1->Height;
width=Image1->Width;

for(int x=0;x<height;x++){
for(int y=0;y<width;y++) {
TempBitmap->Canvas->Pixels[x][y]=0;
if(Image1->Canvas->Pixels[x][y]>Image2->Canvas->Pixels[x][y]
  &&Image1->Canvas->Pixels[x][y]>Image3->Canvas->Pixels[x][y])
  {TempBitmap->Canvas->Pixels[x][y]=1*50;}
else if(Image2->Canvas->Pixels[x][y]>Image1->Canvas->Pixels[x][y]
  &&Image2->Canvas->Pixels[x][y]>Image3->Canvas->Pixels[x][y])
  {TempBitmap->Canvas->Pixels[x][y]=2*50;}
else if(Image3->Canvas->Pixels[x][y]>Image2->Canvas->Pixels[x][y]
  &&Image3->Canvas->Pixels[x][y]>Image1->Canvas->Pixels[x][y])
  {TempBitmap->Canvas->Pixels[x][y]=3*50;}

TempBitmap->Canvas->Pixels[x][y]=TheBitmap->Canvas->Pixels[x][y];

  }
 }
TheBitmap->Assign(TempBitmap);
delete TempBitmap;

if ((Image1->Width!=Image2->Width) && (Image1->Width!=Image3->Width) )
  {
     ShowMessage("Error: Image size not the same!");
     return;
  }

if ((Image1->Height!=Image2->Height) && (Image1->Height!=Image3->Height) )
  {
     ShowMessage("Error: Image size not the same!");
     return;
  }

}

感謝感謝.....^^
 板主 : 徵求中
 > C++ Builder - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ Builder - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++ Builder
1 windblown 5420 
2 Raynor 3120 
3 阿泰 2980 
4 workman 1650 
5 Linkin 1360 
6 CrazyStar 1260 
7 青衫 1160 
8 jonay 1080 
9 charlie 900 
10 小呆 770 
C++ Builder
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2014 程式設計俱樂部 http://www.programmer-club.com.tw/
0.171875