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

請問Image1存入TPoint B[400][400]再顯示於Image2 怎麼變這樣

答題得分者是:ikk
eulor2000
一般會員


發表:51
回覆:34
積分:17
註冊:2008-11-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-20 00:05:46 IP:218.175.xxx.xxx 訂閱
請問Image1存入TPoint B[400][400]再顯示於Image2 怎麼變成背景都是紅色


Graphics::TBitmap *TheBitmap,*TempBitmap;
int x,y;
Byte *ptr1,*ptr2;
TempBitmap=new Graphics::TBitmap();
TheBitmap=Image1->Picture->Bitmap;
TheBitmap->PixelFormat=pf8bit;//這行若是圖片是黑白一定要
TempBitmap->Width=TheBitmap->Width;
TempBitmap->Height=TheBitmap->Height;
TheBitmap->PixelFormat=pf8bit;
........
........略過
for(j=0;j<400;j )
{
ptr1=(Byte*) TheBitmap->ScanLine[j];
for(i=0;i<400;i )
{

TempBitmap->Canvas->Pixels [B[j][i].x][B[j][i].y]=ptr1[i];
}
}
Image2->Picture->Bitmap=TempBitmap;
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-20 08:53:26 IP:163.28.xxx.xxx 訂閱
Canvas->Pixels 是 TColor
TColor 需要 3 種顏色
可由GetRValue, GetGValue, GetBValue取出R,G,B三種顏色
#define GetRValue(rgb) ((BYTE) (rgb))
#define GetGValue(rgb) ((BYTE) (((WORD) (rgb)) >> 8))
#define GetBValue(rgb) ((BYTE) ((rgb) >> 16))
所以你只填進byte 就是 紅色資料.
建議你取出點時, 用TColor來存放.
------
FPGA驗證, FPGA開發平台, http://smims.com
eulor2000
一般會員


發表:51
回覆:34
積分:17
註冊:2008-11-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-23 20:57:32 IP:218.175.xxx.xxx 訂閱
感謝先進答覆....不過我還是看不太懂... 如何讀出image1後 變成 R,G,B三顏色 填入程式那個地方
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-02-24 08:44:50 IP:163.28.xxx.xxx 訂閱
不用提出來呀..
直接assign給你建立的Tcolor陣列...
------
FPGA驗證, FPGA開發平台, http://smims.com
eulor2000
一般會員


發表:51
回覆:34
積分:17
註冊:2008-11-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-02-24 23:34:35 IP:218.175.xxx.xxx 訂閱
Image1     Assign Image2  我會 ,但是你說的Assign to TPoint  B[400][400] 要怎麼做
sorry...我真的是剛學影像新手 ....可以請再說清楚點嗎


有板友之前提供我要這樣做
  1. for(j=0;j
  2. {
  3. for(i=0;i
  4. {
  5. Form1->Image2->Canvas->Pixels[i][j]=TColor(RGB(buffst[i w*j],buffst[i w*j],buffst[i w*j]));
  6. }
  7. } 我在help 內找不到RGB用法及Compiler 都出現沒定義buffst ....
編輯記錄
eulor2000 重新編輯於 2009-02-24 23:52:20, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-02-25 09:06:01 IP:163.28.xxx.xxx 訂閱
應該是存入 TColor  B[400][400];
B[i][j] = Form1->Image1->Canvas->Pixels[i][j];
Form1->Image2->Canvas->Pixels[i][j] = B[i][j];
------
FPGA驗證, FPGA開發平台, http://smims.com
eulor2000
一般會員


發表:51
回覆:34
積分:17
註冊:2008-11-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-02-25 17:03:29 IP:210.71.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
應該是存入 TColor B[400][400];
B[i][j] = Form1->Image1->Canvas->Pixels[i][j];
Form1->Image2->Canvas->Pixels[i][j] = B[i][j]

首先謝謝你再次指導, 你的方法我試了不行,會出現" cannot TColor to TPoint " message 因為我當初是宣告TPoint B[400][400] 矩陣 TPoint是螢幕上某Pixels 位置 ,我的程式就是TPoint B[400][400] 存放計算完圖片新的位址,再將Image1照片寫入TPoint B[400][400] 再存到Image2產生新運算照片,現在問題是出在Image1 搬過去像素顏色顯示不對....
編輯記錄
eulor2000 重新編輯於 2009-02-25 17:08:07, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-02-25 17:19:16 IP:163.28.xxx.xxx 訂閱
我想你搞錯 TPoint和TColor了吧...
既然是新的位址, 跟顏色應該扯無上關係..
TColor 當然無法存入TPoint.

你的意思應該是
根據TPoint B陣列的座標值將Image1的pixel放入Image2.
是嗎??
------
FPGA驗證, FPGA開發平台, http://smims.com
eulor2000
一般會員


發表:51
回覆:34
積分:17
註冊:2008-11-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-02-25 21:32:53 IP:218.175.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
我想你搞錯 TPoint和TColor了吧...
既然是新的位址, 跟顏色應該扯無上關係..
TColor 當然無法存入TPoint.

你的意思應該是
根據TPoint B陣列的座標值將Image1的pixel放入Image2.
是嗎??------->沒錯這正是我希望的....下面是我原始碼請幫我指導看一下

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Refresh();
Graphics::TBitmap *TheBitmap,*TempBitmap;
int x,y;
Byte *ptr1,*ptr2;
TempBitmap=new Graphics::TBitmap();
TheBitmap=Image1->Picture->Bitmap;
TheBitmap->PixelFormat=pf24bit;//這行若是圖片是黑白一定要
TempBitmap->Width=TheBitmap->Width;
TempBitmap->Height=TheBitmap->Height;
TheBitmap->PixelFormat=pf8bit;
float t=0,u=0,u2,t2,u_1,u_2,t_1,t_2;
int i,j;
for(j=0;j<=400;j )
{
for(i=0;i<=400;i )
{
u2=u*u; //u^2
u_1=1-u; //1-u
u_2=u_1*u_1; //(1-u)^2
t2=t*t; //t^2
t_1=1-t; //1-t
t_2=t_1*t_1; //(1-t)^2 // 本段是計算新的在螢幕上某一點位置存入 TPoint B[400][400];
B[j][i].x=(int)(u_2*t_2*p[0].x) (u_2*2*t*t_1*p[1].x) (u_2*t2*p[2].x) (2*u*u_1*t_2*p[3].x) (2*u*u_1*2*t*t_1*p[4].x) (2*u*u_1*t2*p[5].x) (u2*t_2*p[6].x) (u2*2*t*t_1*p[7].x) (u2*t2*p[8].x);
B[j][i].y=(int)(u_2*t_2*p[0].y) (u_2*2*t*t_1*p[1].y) (u_2*t2*p[2].y) (2*u*u_1*t_2*p[3].y) (2*u*u_1*2*t*t_1*p[4].y) (2*u*u_1*t2*p[5].y) (u2*t_2*p[6].y) (u2*2*t*t_1*p[7].y) (u2*t2*p[8].y);

t=t 0.0025;
}
t=0;
u=u 0.0025;;
}
for(j=0;j<400;j )
{
ptr1=(Byte*) TheBitmap->ScanLine[j];
for(i=0;i<400;i )
{ // 本段是把Imge1上每個像素填入新的位置 TPoint B[400][400];
TempBitmap->Canvas->Pixels [B[j][i].x][B[j][i].y]=ptr1[i]; //關鍵出在這行為何我將TheBitmap每點pixels 搬過去後顯示確有問題
}
}
Image2->Picture->Bitmap=TempBitmap;
delete TempBitmap;

}
編輯記錄
eulor2000 重新編輯於 2009-02-25 21:36:59, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-02-26 08:50:40 IP:163.28.xxx.xxx 訂閱

[code cpp]
for(j=0;j<400;j )
{
//ptr1=(Byte*) TheBitmap->ScanLine[j];
for(i=0;i<400;i )
{ // 本段是把Imge1上每個像素填入新的位置 TPoint B[400][400];
TempBitmap->Canvas->Pixels [B[j][i].x][B[j][i].y]=TheBitmap->Canvas->Pixels[j][i];
}
}
[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
eulor2000
一般會員


發表:51
回覆:34
積分:17
註冊:2008-11-18

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-02-26 23:43:30 IP:218.175.xxx.xxx 訂閱
十分感謝你的指導,問題解決了,我根據TPoint B陣列的座標值將Image1的pixel放入Image2 後會發生如下圖紅圈處情形,有些地方回沒填入像素 
請問我如何調整解決這問題呢,請再次麻煩你指導...
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-02-27 07:59:58 IP:163.28.xxx.xxx 訂閱
你可能要看你的演算法, 是否有些點沒填入...
------
FPGA驗證, FPGA開發平台, http://smims.com
eulor2000
一般會員


發表:51
回覆:34
積分:17
註冊:2008-11-18

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-02-27 08:07:25 IP:210.71.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
你可能要看你的演算法, 是否有些點沒填入...
根據我實際操作結果,有沒填入的點並不昰固定地方,我如果直接以判斷Image2 顯示白色畫素作調整又會去找到很多邊緣白色區域....
編輯記錄
eulor2000 重新編輯於 2009-02-27 13:24:58, 註解 無‧
系統時間:2024-04-26 23:19:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!