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

類似暫存記憶

答題得分者是:tomoi
augczo
一般會員


發表:3
回覆:10
積分:2
註冊:2008-06-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-14 13:08:53 IP:140.117.xxx.xxx 訂閱
就是我會在image上產生數張圖片
需要暫存起來
之後又需要把他們叫出來做影像處理

一個四連桿機構
我想用迴圈造成每轉一度就產生一張圖
例如40度轉到80度之間 共41張圖
之後又把41張圖叫出來疊加

其中之間的暫存需要用什麼指令...
目前沒有頭緒
大概跟我說一下方向
我去找書籍來研究

謝謝
------
嘎嘎嘎
hipig
高階會員


發表:31
回覆:75
積分:111
註冊:2007-01-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-14 18:12:53 IP:140.126.xxx.xxx 未訂閱
提示
把圖當作陣列來放來處理
tomoi
初階會員


發表:2
回覆:30
積分:41
註冊:2008-07-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-15 08:22:14 IP:59.120.xxx.xxx 訂閱
我比較好奇圖片疊加之後是會變成什麼樣子?
這樣做的目的又是什麼?
------
Tomo
jenwe
一般會員


發表:34
回覆:38
積分:24
註冊:2007-03-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-07-16 13:07:42 IP:140.118.xxx.xxx 訂閱
疊加變成軌跡移動嗎?!棋時我也很好奇~因為如果處理顏色沒有淡化
疊加起來的圖應該是亂七八糟!!
===================引 用 tomoi 文 章===================
我比較好奇圖片疊加之後是會變成什麼樣子?
這樣做的目的又是什麼?
augczo
一般會員


發表:3
回覆:10
積分:2
註冊:2008-06-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-07-16 14:56:13 IP:140.117.xxx.xxx 訂閱
會做類似透明度的處理
主要是要看重疊區域
------
嘎嘎嘎
tomoi
初階會員


發表:2
回覆:30
積分:41
註冊:2008-07-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-07-16 16:29:32 IP:59.120.xxx.xxx 訂閱
不知道這樣行不行,請指教

動態宣告一堆bitmap來暫存
用完再delete就好

[code cpp]
int count=xx;//xx張bitmap
int i;

Graphics::TBitmap **imagelist;
imagelist= new Graphics::TBitmap*[count];
for(i=0; i imagelist[i]=new Graphics::TBitmap();//產生count個bitmap
.
.
.
//after process
for(i=0; i delete imagelist[i];
delete []imagelist;
imagelist=NULL;
[/code]
------
Tomo
augczo
一般會員


發表:3
回覆:10
積分:2
註冊:2008-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-07-17 15:29:38 IP:140.117.xxx.xxx 訂閱
抱歉 我還是不太瞭解
我po上我的程式碼

以下是把四連桿機構畫出來
每畫一張手動存檔一次
[code cpp]
{
if(But1->Checked==true)
{
Image1->Picture=NULL;
r1=StrToFloat(Edit1->Text);
r2=StrToFloat(Edit2->Text);
r3=StrToFloat(Edit3->Text);
r4=StrToFloat(Edit4->Text);

a1=StrToFloat(Edit5->Text);
a2=StrToFloat(Edit6->Text);

x1=200,y1=500;
x2=x1 r2*cos(a2*pi/180);
y2=y1-r2*sin(a2*pi/180);
x4=x1 r1*cos(a1*pi/180);
y4=y1-r1*sin(a1*pi/180);

A=2*r1*r4*cos(a1*pi/180)-2*r2*r4*cos(a2*pi/180);
B=2*r1*r4*sin(a1*pi/180)-2*r2*r4*sin(a2*pi/180);
C=r1*r1 r2*r2 r4*r4-r3*r3-2*r1*r2*(cos(a1*pi/180)*cos(a2*pi/180) sin(a1*pi/180)*sin(a2*pi/180));
a4=(2*atan2((-B-sqrt(B*B-C*C A*A)),(C-A)))*180/pi;

x3=x4 r4*cos(a4*pi/180);
y3=y4-r4*sin(a4*pi/180);
a3=(atan2((y3-y2),(x3-x2)));
a3=-1*a3;

Image1->Canvas->Pen->Color=clRed;
Image1->Canvas->Pen->Width=2;
Image1->Canvas->MoveTo(x1,y1);
Image1->Canvas->LineTo(x2,y2);
Image1->Canvas->LineTo(x3,y3);
Image1->Canvas->LineTo(x4,y4);

}[/code]

而之後我又用另一個程式
把圖一張一張叫出來做透明度處理
是可以得到我要的結果
但是效率不好
希望能像上面所說
2個程式合在一起

[code cpp]
{
Image11->Picture=NULL;
Image11->Width=width;
Image11->Height=depth;
int i,j=0,k;
int g;
int r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11;
int g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11;
int b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11;
float m,n;
n=StrToFloat(InputBox("張數","請輸入張數:",""));
for(i=0;i {
for(j=0;j {
r1=((int)(ColorToRGB(Image1->Canvas->Pixels[i][j])) & 0x000000ff) ;
g1=((int)(ColorToRGB(Image1->Canvas->Pixels[i][j])) & 0x0000ff00) >> 8;
b1=((int)(ColorToRGB(Image1->Canvas->Pixels[i][j])) & 0x00ff0000) >> 16;
r2=((int)(ColorToRGB(Image2->Canvas->Pixels[i][j])) & 0x000000ff) ;
g2=((int)(ColorToRGB(Image2->Canvas->Pixels[i][j])) & 0x0000ff00) >> 8;
b2=((int)(ColorToRGB(Image2->Canvas->Pixels[i][j])) & 0x00ff0000) >> 16;
r3=((int)(ColorToRGB(Image3->Canvas->Pixels[i][j])) & 0x000000ff) ;
g3=((int)(ColorToRGB(Image3->Canvas->Pixels[i][j])) & 0x0000ff00) >> 8;
b3=((int)(ColorToRGB(Image3->Canvas->Pixels[i][j])) & 0x00ff0000) >> 16;
r4=((int)(ColorToRGB(Image4->Canvas->Pixels[i][j])) & 0x000000ff) ;
g4=((int)(ColorToRGB(Image4->Canvas->Pixels[i][j])) & 0x0000ff00) >> 8;
b4=((int)(ColorToRGB(Image4->Canvas->Pixels[i][j])) & 0x00ff0000) >> 16;
r5=((int)(ColorToRGB(Image5->Canvas->Pixels[i][j])) & 0x000000ff) ;
g5=((int)(ColorToRGB(Image5->Canvas->Pixels[i][j])) & 0x0000ff00) >> 8;
b5=((int)(ColorToRGB(Image5->Canvas->Pixels[i][j])) & 0x00ff0000) >> 16;
r6=((int)(ColorToRGB(Image6->Canvas->Pixels[i][j])) & 0x000000ff) ;
g6=((int)(ColorToRGB(Image6->Canvas->Pixels[i][j])) & 0x0000ff00) >> 8;
b6=((int)(ColorToRGB(Image6->Canvas->Pixels[i][j])) & 0x00ff0000) >> 16;
r7=((int)(ColorToRGB(Image7->Canvas->Pixels[i][j])) & 0x000000ff) ;
g7=((int)(ColorToRGB(Image7->Canvas->Pixels[i][j])) & 0x0000ff00) >> 8;
b7=((int)(ColorToRGB(Image7->Canvas->Pixels[i][j])) & 0x00ff0000) >> 16;
r8=((int)(ColorToRGB(Image8->Canvas->Pixels[i][j])) & 0x000000ff) ;
g8=((int)(ColorToRGB(Image8->Canvas->Pixels[i][j])) & 0x0000ff00) >> 8;
b8=((int)(ColorToRGB(Image8->Canvas->Pixels[i][j])) & 0x00ff0000) >> 16;
r9=((int)(ColorToRGB(Image9->Canvas->Pixels[i][j])) & 0x000000ff) ;
g9=((int)(ColorToRGB(Image9->Canvas->Pixels[i][j])) & 0x0000ff00) >> 8;
b9=((int)(ColorToRGB(Image9->Canvas->Pixels[i][j])) & 0x00ff0000) >> 16;
r10=((int)(ColorToRGB(Image10->Canvas->Pixels[i][j])) & 0x000000ff) ;
g10=((int)(ColorToRGB(Image10->Canvas->Pixels[i][j])) & 0x0000ff00) >> 8;
b10=((int)(ColorToRGB(Image10->Canvas->Pixels[i][j])) & 0x00ff0000) >> 16;
m=1/n;

r11=r1*m r2*m r3*m r4*m r5*m r6*m r7*m r8*m r9*m r10*m;
g11=g1*m g2*m g3*m g4*m g5*m g6*m g7*m g8*m g9*m g10*m;
b11=b1*m b2*m b3*m b4*m b5*m b6*m b7*m b8*m b9*m b10*m;
g=r11*0.3 g11*0.3 b11*0.4;
Image11->Canvas->Pixels[i][j]=TColor(RGB(r11,g11,b11));
}
}
}

[/code]
------
嘎嘎嘎
編輯記錄
augczo 重新編輯於 2008-07-17 15:46:16, 註解 無‧
tomoi
初階會員


發表:2
回覆:30
積分:41
註冊:2008-07-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-07-17 16:05:14 IP:59.120.xxx.xxx 訂閱
圖不要直接畫在Image->canvas上
可以畫在Image->Picture->Bitmap->Canvas上
再丟到之前我說的imagelist[count]裡暫存

Canvas->Pixels[i][j]改成用ScanLine的方法會快很多
怎麼用站上很多前輩的文章都有

其實你的程式還有別的問題..不過我不知道要怎麼表達
請別的前輩來說好了
------
Tomo
編輯記錄
tomoi 重新編輯於 2008-07-17 16:10:03, 註解 無‧
augczo
一般會員


發表:3
回覆:10
積分:2
註冊:2008-06-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-07-17 16:27:27 IP:140.117.xxx.xxx 訂閱
有問題的部份
你是指上半部還下半部?
下半部我跑起來有一點點怪怪的...
ScanLine的方法書上有提到 我在看看
------
嘎嘎嘎
編輯記錄
augczo 重新編輯於 2008-07-17 16:30:34, 註解 無‧
tomoi
初階會員


發表:2
回覆:30
積分:41
註冊:2008-07-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-07-22 17:32:18 IP:59.120.xxx.xxx 訂閱
沒前輩回應
那只好小弟再出來獻醜了
我說的有問題指的是解決的方法有問題
既然四連桿也是你自己畫出來的
那為什麼不直接把結果全部畫上去,而要一張一張處理?
另外在淡化的程式部份 例如下面這行
r11=r1*m r2*m r3*m r4*m r5*m r6*m r7*m r8*m r9*m r10*m;

改成
r11=r1 r2 r3 r4 r5 r6 r7 r8 r9 r10;
r11*=m;

會快一些些
因為處理乘除法會比加減法來的慢
盡量減少用到乘除法的次數


===================引 用 augczo 文 章===================
有問題的部份
你是指上半部還下半部?
下半部我跑起來有一點點怪怪的...
ScanLine的方法書上有提到 我在看看
------
Tomo
augczo
一般會員


發表:3
回覆:10
積分:2
註冊:2008-06-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-07-24 17:19:00 IP:140.117.xxx.xxx 訂閱
...
------
嘎嘎嘎
編輯記錄
augczo 重新編輯於 2008-07-31 12:57:52, 註解 無‧
augczo
一般會員


發表:3
回覆:10
積分:2
註冊:2008-06-10

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-07-31 12:55:02 IP:140.117.xxx.xxx 訂閱
我想再請問一個問題
目前我是用迴圈劃出各角度的圖都在Image1上
那如果我在Form2 開數十個Image
有辦法第一個角度畫在Form2->Image1
第二個角度畫在Form2->Image2 嗎?
依此類堆

[code cpp]
for(a2=a2;a2 {
x1=200,y1=500;
x2=x1 r2*cos(a2*pi/180);
y2=y1-r2*sin(a2*pi/180);
x4=x1 r1*cos(a1*pi/180);
y4=y1-r1*sin(a1*pi/180);

A=2*r1*r4*cos(a1*pi/180)-2*r2*r4*cos(a2*pi/180);
B=2*r1*r4*sin(a1*pi/180)-2*r2*r4*sin(a2*pi/180);
C=r1*r1 r2*r2 r4*r4-r3*r3-2*r1*r2*(cos(a1*pi/180)*cos(a2*pi/180) sin(a1*pi/180)*sin(a2*pi/180));
a4=(2*atan2((-B-sqrt(B*B-C*C A*A)),(C-A)))*180/pi;

x3=x4 r4*cos(a4*pi/180);
y3=y4-r4*sin(a4*pi/180);
a3=(atan2((y3-y2),(x3-x2)));
a3=-1*a3;

m12=(y1-y2)/(x1-x2);
m34=(y3-y4)/(x3-x4);
s1=(-m12) m34;
x5=((y2-m12*x2)-(y3-m34*x3))/s1;
y5=((-m12)*(y3-m34*x3) (m34)*(y2-m12*x2))/s1;

m26=(-1)*(x1-x2)/(y1-y2);
s2=(-m26) m34;
x6=((y2-m26*x2)-(y3-m34*x3))/s2;
y6=((-m26)*(y3-m34*x3) (m34)*(y2-m26*x2))/s2;

m89=(-1)*(x3-x4)/(y3-y4);
x7=(x2 x5)/2;
y7=(y2 y5)/2;
x8=(x5 x6)/2;
y8=(y5 y6)/2;

s3=(-m26) m89;
x9=((y7-m26*x7)-(y8-m89*x8))/s3;
y9=((-m26)*(y8-m89*x8) (m89)*(y7-m26*x7))/s3;

r5=sqrt((x9-x5)*(x9-x5) (y9-y5)*(y9-y5));
Image1->Canvas->Pen->Color=clRed; //請問這邊該如何修改?
Image1->Canvas->Pen->Width=1;
Image1->Canvas->Brush->Style=bsClear;
Image1->Canvas->Ellipse(x9-r5,y9-r5,x9 r5,y9 r5);
}
[/code]
------
嘎嘎嘎
編輯記錄
augczo 重新編輯於 2008-07-31 12:56:48, 註解 無‧
tomoi
初階會員


發表:2
回覆:30
積分:41
註冊:2008-07-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2008-07-31 16:00:35 IP:59.120.xxx.xxx 訂閱
就....畫在Form1上面的時候順便畫在Form2上

照你的流程就是在迴圈的裡面加上畫在Form2上的程式
------
Tomo
augczo
一般會員


發表:3
回覆:10
積分:2
註冊:2008-06-10

發送簡訊給我
#14 引用回覆 回覆 發表時間:2008-07-31 17:32:52 IP:118.171.xxx.xxx 訂閱
TOMOI
不曉得你有看懂我的意思嗎
我希望能畫在Form2的不同Image上
但是我不曉得怎樣搭配回圈...
麻煩了 感謝
===================引 用 tomoi 文 章===================
就....畫在Form1上面的時候順便畫在Form2上

照你的流程就是在迴圈的裡面加上畫在Form2上的程式

------
嘎嘎嘎
tomoi
初階會員


發表:2
回覆:30
積分:41
註冊:2008-07-14

發送簡訊給我
#15 引用回覆 回覆 發表時間:2008-07-31 22:01:19 IP:220.139.xxx.xxx 訂閱
Form2上的有很多個Image可以用陣列宣告  像是Image[i]

如果你是自己拉很多元件放到Form2上面
可以用name的命名加上數字配合Findcomponent的方法 (關鍵字搜尋一下吧)


一般迴圈寫法就是

[code cpp]
int i;
for(i=0; i{
.
.
.
.
Form2->Image[i]->Draw.........; //每次迴圈的i都會 1 不就是畫在不同的Image上嗎??

}

[/code]

我想我應該沒有誤會你的意思吧

===================引 用 augczo 文 章===================
TOMOI
不曉得你有看懂我的意思嗎
我希望能畫在Form2的不同Image上
但是我不曉得怎樣搭配回圈...
麻煩了 感謝
===================引 用 tomoi 文 章===================
就....畫在Form1上面的時候順便畫在Form2上

照你的流程就是在迴圈的裡面加上畫在Form2上的程式

------
Tomo
augczo
一般會員


發表:3
回覆:10
積分:2
註冊:2008-06-10

發送簡訊給我
#16 引用回覆 回覆 發表時間:2008-07-31 22:16:00 IP:118.171.xxx.xxx 訂閱
感謝tomoi
我來試試看
希望能成功
就可以結案了= ="
------
嘎嘎嘎
augczo
一般會員


發表:3
回覆:10
積分:2
註冊:2008-06-10

發送簡訊給我
#17 引用回覆 回覆 發表時間:2008-08-01 11:23:08 IP:118.171.xxx.xxx 訂閱
我又把它改成都顯示在Form1了
以下這段可以執行
不過圖案沒有出來
不知道問題出在哪
還有雙重迴圈是這樣用的嗎?
不吝指教...

[code cpp]
{
for(a2=40;a2<50;a2 )
{
for(o=0;o<10;o )
.
.
.
TImage* Image;
Image = (TImage*)FindComponent("Image" IntToStr(o 1));
Image->Canvas->Pen->Color=clRed;
Image->Canvas->Pen->Width=1;
Image->Canvas->Brush->Style=bsClear;
Image->Canvas->Ellipse(x9-r5,y9-r5,x9 r5,y9 r5);
}
}

[/code]
------
嘎嘎嘎
tomoi
初階會員


發表:2
回覆:30
積分:41
註冊:2008-07-14

發送簡訊給我
#18 引用回覆 回覆 發表時間:2008-08-01 16:42:50 IP:59.120.xxx.xxx 訂閱
 TImage* Image; //要放在迴圈外面 不然不就一直重覆宣告了嗎!?
其它問題我就不再回覆了,請你加油吧.

===================引 用 augczo 文 章===================
我又把它改成都顯示在Form1了
以下這段可以執行
不過圖案沒有出來
不知道問題出在哪
還有雙重迴圈是這樣用的嗎?
不吝指教...

[code cpp]
{
for(a2=40;a2<50;a2 )
{
for(o=0;o<10;o )
.
.
.
TImage* Image;
Image = (TImage*)FindComponent("Image" IntToStr(o 1));
Image->Canvas->Pen->Color=clRed;
Image->Canvas->Pen->Width=1;
Image->Canvas->Brush->Style=bsClear;
Image->Canvas->Ellipse(x9-r5,y9-r5,x9 r5,y9 r5);
}
}

[/code]
------
Tomo
augczo
一般會員


發表:3
回覆:10
積分:2
註冊:2008-06-10

發送簡訊給我
#19 引用回覆 回覆 發表時間:2008-08-02 02:24:23 IP:118.171.xxx.xxx 訂閱
恩 感謝
------
嘎嘎嘎
系統時間:2024-04-26 0:43:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!