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

如何開啟圖檔後在畫圖,並且所畫的圖可以移動及放大

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


發表:20
回覆:22
積分:8
註冊:2008-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-24 16:53:38 IP:61.62.xxx.xxx 訂閱
小弟目前要開啟一張圖檔(jpg),

然後在讓圖檔畫圓、矩型等圖案,並且要讓所畫的圖可以移動(也就是可以改變位置)

及放大縮小。

目前己經完成在jpg 圖檔上面畫圖了,但接下來苦思了二天,豪無思緒…

參考了這一篇

http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=86116

也不知怎麼開始。

懇請各位先進賜教
------
Spencer~~~~*
tomoi
初階會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-26 15:12:23 IP:59.120.xxx.xxx 訂閱
如果不曉得怎麼開始的話
可以找這本書來看
應該可以解決你大部份的問題

C Builder與影像處理
黃文吉 著
------
Tomo
f814030
一般會員


發表:20
回覆:22
積分:8
註冊:2008-04-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-12-26 20:08:30 IP:163.17.xxx.xxx 訂閱
感謝您的提議,明日去書局找找這本書…

學校竟然沒有…
------
Spencer~~~~*
alvinken
初階會員


發表:21
回覆:32
積分:45
註冊:2008-06-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-12-27 09:33:04 IP:218.170.xxx.xxx 未訂閱
那本書的內容跟你参考的文章是差不多的
只是他有更詳細的說明跟 code

你的需求是只移動跟縮放自己畫的圖
而不會動到背景圖?



------
水至清則無魚,人至賤則無敵。
f814030
一般會員


發表:20
回覆:22
積分:8
註冊:2008-04-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-12-27 15:27:23 IP:163.17.xxx.xxx 訂閱
是的!在不動到背景圖的情況下,移動及縮放自己所畫的「圓」

小弟試著在MouseMove的時後,新建一個bmp圖層,但依舊沒有任何作用…

目前在思考,要如何才可以讓圖層移動…
------
Spencer~~~~*
tomoi
初階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-12-27 16:17:02 IP:220.139.xxx.xxx 訂閱
如果只是要畫一個圓當做標記的話

最簡單的就是penmode設xor的型熊(抱歉實際語法是什麼我忘了^^)

mousedown開始畫圓
mousemove先把之前畫的圓再xor一次,就會回到原來的圖,接著再畫上新的圓
mouseup結束畫

code我想站上搜尋一下應該就有了

看書的好處是一步一步教,
站上的文章都很受用,只是有時候我自己會覺得功力不到常看不懂XD
------
Tomo
f814030
一般會員


發表:20
回覆:22
積分:8
註冊:2008-04-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-12-27 18:10:58 IP:163.17.xxx.xxx 訂閱
小弟有做出畫圓的方法了,但是現在不知要如何讓圓可以移動…


[code cpp]
Label1->Caption=X;
Label2->Caption=Y;
Image2->Canvas->Pen->Color = clRed;
Image2->Canvas->Pen->Mode = pmXor;
Image2->Canvas->Pen->Style = psSolid;
Image2->Canvas->Brush->Style = bsClear;
Image2->Canvas->Ellipse(MDoriginX,MDoriginY,MDmoveX,MDmoveY);
MDmoveX=X;
MDmoveY=Y;
Image2->Canvas->Ellipse(MDoriginX,MDoriginY,MDmoveX,MDmoveY);
Image2->Canvas->Pen->Mode = pmCopy;

[/code]
------
Spencer~~~~*
編輯記錄
f814030 重新編輯於 2008-12-27 19:01:39, 註解 無‧
tomoi
初階會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-12-27 18:46:53 IP:220.139.xxx.xxx 訂閱
移動??
是指畫完一個圓然後再用滑鼠拖曳著這個圓移動嗎??
那圓裡面的圖要跟著動嗎??

不大清楚你要做的效果耶?
------
Tomo
f814030
一般會員


發表:20
回覆:22
積分:8
註冊:2008-04-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-12-27 18:56:15 IP:163.17.xxx.xxx 訂閱
只要用滑鼠托著「圓移動」,

背景圖是不需要動的

感謝您的回覆~
------
Spencer~~~~*
tomoi
初階會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-12-27 19:15:25 IP:220.139.xxx.xxx 訂閱
就把原來的圓再 xor一次回復
再用新的座標畫一次圓
------
Tomo
f814030
一般會員


發表:20
回覆:22
積分:8
註冊:2008-04-04

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-12-27 19:39:59 IP:163.17.xxx.xxx 訂閱
小弟有用xor 模式下去畫了,但是怎麼改寫都不會清除上一步所畫的「圓」…

可否請您提式一下呢?謝謝
------
Spencer~~~~*
tomoi
初階會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-12-27 22:41:34 IP:220.139.xxx.xxx 訂閱

[code cpp]

//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Graphics::TBitmap *bmp;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
PaintBox1->Canvas->Draw(0,0,bmp);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
bmp=NULL;
bmp=new Graphics::TBitmap;
if(!bmp)
return;
int w=PaintBox1->Width;
int h=PaintBox1->Height;
bmp->SetSize(w,h);
bmp->Canvas->Pen->Color=clBlack;
bmp->Canvas->Brush->Color=clBlack;
bmp->Canvas->Brush->Style=bsSolid;
bmp->Canvas->FillRect(TRect(0,0,w,h));
bmp->Canvas->Pen->Mode=pmXor;
bmp->Canvas->Pen->Color=clWhite;
bmp->Canvas->Brush->Style=bsClear;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if(bmp!=NULL)
delete bmp;
bmp=NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
bmp->Canvas->Ellipse(5,5,100,100);
Invalidate();
}
//---------------------------------------------------------------------------

[/code]

簡單試寫了一下
我猜你應該是少了Invalidate()吧 ^^

我也是新手
如有錯誤請更正
------
Tomo
f814030
一般會員


發表:20
回覆:22
積分:8
註冊:2008-04-04

發送簡訊給我
#13 引用回覆 回覆 發表時間:2008-12-28 18:38:50 IP:163.17.xxx.xxx 訂閱
感謝您的指導!目前對於Invalidate(); 的處理尚有些問題…

學生在自己試試看!謝謝您!
===================引 用 tomoi 文 章===================
------
Spencer~~~~*
系統時間:2024-04-25 14:12:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!