類似暫存記憶 |
答題得分者是:tomoi
|
augczo
一般會員 發表:3 回覆:10 積分:2 註冊:2008-06-10 發送簡訊給我 |
|
hipig
高階會員 發表:31 回覆:75 積分:111 註冊:2007-01-15 發送簡訊給我 |
|
tomoi
初階會員 發表:2 回覆:30 積分:41 註冊:2008-07-14 發送簡訊給我 |
|
jenwe
一般會員 發表:34 回覆:38 積分:24 註冊:2007-03-23 發送簡訊給我 |
|
augczo
一般會員 發表:3 回覆:10 積分:2 註冊:2008-06-10 發送簡訊給我 |
|
tomoi
初階會員 發表:2 回覆:30 積分:41 註冊:2008-07-14 發送簡訊給我 |
不知道這樣行不行,請指教
動態宣告一堆bitmap來暫存 用完再delete就好 [code cpp] int count=xx;//xx張bitmap int i; Graphics::TBitmap **imagelist; imagelist= new Graphics::TBitmap*[count]; for(i=0; i . . . //after process for(i=0; i delete []imagelist; imagelist=NULL; [/code]
------
Tomo |
augczo
一般會員 發表:3 回覆:10 積分:2 註冊:2008-06-10 發送簡訊給我 |
抱歉 我還是不太瞭解
我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 發送簡訊給我 |
|
augczo
一般會員 發表:3 回覆:10 積分:2 註冊:2008-06-10 發送簡訊給我 |
|
tomoi
初階會員 發表:2 回覆:30 積分:41 註冊:2008-07-14 發送簡訊給我 |
沒前輩回應
那只好小弟再出來獻醜了 我說的有問題指的是解決的方法有問題 既然四連桿也是你自己畫出來的 那為什麼不直接把結果全部畫上去,而要一張一張處理? 另外在淡化的程式部份 例如下面這行 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 發送簡訊給我 |
|
augczo
一般會員 發表:3 回覆:10 積分:2 註冊:2008-06-10 發送簡訊給我 |
我想再請問一個問題
目前我是用迴圈劃出各角度的圖都在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 發送簡訊給我 |
|
augczo
一般會員 發表:3 回覆:10 積分:2 註冊:2008-06-10 發送簡訊給我 |
|
tomoi
初階會員 發表:2 回覆:30 積分:41 註冊:2008-07-14 發送簡訊給我 |
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 發送簡訊給我 |
|
augczo
一般會員 發表:3 回覆:10 積分:2 註冊:2008-06-10 發送簡訊給我 |
我又把它改成都顯示在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 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |