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

請教TBitmap的CopyRect的問題

缺席
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-02 17:45:18 IP:203.64.xxx.xxx 訂閱
我寫了一行程式如下

BMP->Canvas->CopyRect(Rect(0, 0, BMP->Width, BMP->Height), Canvas, Rect(0, 0, Panel1->Width, Panel1->Height));

得到的結果是 它將我整個Form的(0,0)位置copy到我的BMP去了
請問要怎樣敘述才可以將我要的Panel1的(0,0)位置copy到BMP呢?

煩請解惑~~
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-02 18:18:36 IP:118.169.xxx.xxx 訂閱
是Canvas的問題
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-03 16:49:13 IP:203.64.xxx.xxx 訂閱
因為是使用版上的EzCapCamera
還不會使用component
已可直接使用EzCapCamera
所以就沒有那個問題了~
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-03 16:50:42 IP:203.64.xxx.xxx 訂閱
是因為使用Canvas才會這樣嗎?
有其他的解決方式嗎?

===================引 用 taishyang 文 章===================
是Canvas的問題
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-03-03 17:05:26 IP:61.222.xxx.xxx 訂閱
 Panel 的 Canvas 屬性並未 Plublic 出來
用 API Bitblt 方法或直接用 Panel1->Paintto 的方法
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-03-03 17:43:19 IP:118.169.xxx.xxx 訂閱
在EzCapCamera中我有把Canvas public出來
所以code中的Canvas就是表示該Panel(
EzCapCamera)的Canvas
編輯記錄
taishyang 重新編輯於 2009-03-03 17:44:54, 註解 無‧
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-03-03 21:11:42 IP:61.223.xxx.xxx 訂閱
你好:
我剛好跟你寫的差不多呢
但是我覺得你好像陷入困境了
所以我把我搜尋到的讓你參考看看吧


[code cpp]
HDC hDC=GetDC(Panel1->Handle);
pCanvas->Handle=hDC;
//pCanvas->Pen->Mode = pmCopy;
//pCanvas->Pen->Style = psSolid;
//pCanvas->Brush->Style = bsClear;
bmp->Canvas->CopyRect(Panel1->ClientRect,pCanvas,Panel1->ClientRect);

[/code]

其實我學這個是用來實地測試自己專題的......不知道你是用來做啥用的??
------
恩...
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-03-04 09:44:05 IP:203.64.xxx.xxx 訂閱
是的
所以我後來直接用您的EzCapCamera來擷取影像畫面

只是之前我要試著用您裡面的CapBitmapFrame()
另外寫一個
所以造成copyrect後是copy我的Form 而不是從那個Panel了

===================引 用 taishyang 文 章===================
在EzCapCamera中我有把Canvas public出來
所以code中的Canvas就是表示該Panel(
EzCapCamera)的Canvas
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-03-04 09:47:42 IP:203.64.xxx.xxx 訂閱
可否稍微解釋一下
pCancas->Handel=hDC;
我需要新增什麼元件還是new什麼嗎?

===================引 用 istillloving 文 章===================
你好:
我剛好跟你寫的差不多呢
但是我覺得你好像陷入困境了
所以我把我搜尋到的讓你參考看看吧


[code cpp]
HDC hDC=GetDC(Panel1->Handle);
pCanvas->Handle=hDC;
//pCanvas->Pen->Mode = pmCopy;
//pCanvas->Pen->Style = psSolid;
//pCanvas->Brush->Style = bsClear;
bmp->Canvas->CopyRect(Panel1->ClientRect,pCanvas,Panel1->ClientRect);

[/code]

其實我學這個是用來實地測試自己專題的......不知道你是用來做啥用的??
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-03-04 17:37:09 IP:140.127.xxx.xxx 訂閱
抱歉我把宣告的地方分開了

[code cpp]
TCanvas *pCanvas = new TCanvas;
[/code]

其實剛剛請教了一下 "Google" 大神
打上 pCancas 他會教你滴

這一篇也不錯

delphi.ktop.com.tw/board.php


===================引 用 aee36900 文 章===================
可否稍微解釋一下
pCancas->Handel=hDC;
我需要新增什麼元件還是new什麼嗎?

===================引 用 istillloving 文 章===================
你好:
我剛好跟你寫的差不多呢
但是我覺得你好像陷入困境了
所以我把我搜尋到的讓你參考看看吧


[code cpp]
HDC hDC=GetDC(Panel1->Handle);
pCanvas->Handle=hDC;
//pCanvas->Pen->Mode = pmCopy;
//pCanvas->Pen->Style = psSolid;
//pCanvas->Brush->Style = bsClear;
bmp->Canvas->CopyRect(Panel1->ClientRect,pCanvas,Panel1->ClientRect);

[/code]

其實我學這個是用來實地測試自己專題的......不知道你是用來做啥用的??
------
恩...
編輯記錄
istillloving 重新編輯於 2009-03-04 17:39:01, 註解 無‧
istillloving 重新編輯於 2009-03-04 17:40:20, 註解 無‧
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-03-06 09:41:41 IP:203.64.xxx.xxx 訂閱
我重新試了你的程式碼
可以run
但是我的image沒有東西show出來...
我也無解了...

我放上我的code 可以討論一下
Graphics::TBitmap *BMP = new Graphics::TBitmap;
TCanvas *pCanvas = new TCanvas;
HDC hDC=GetDC(Panel1->Handle);
pCanvas->Handle=hDC;
BMP->Canvas->CopyRect(Panel1->ClientRect,pCanvas,Panel1->ClientRect);
Image1->Picture->Bitmap->Assign(BMP);

by the way
目前我正在
擷取webcam影像並轉存為DICOM(醫學影像檔案)

非常感謝你的參予討論~~

===================引 用 istillloving 文 章===================
抱歉我把宣告的地方分開了

[code cpp]
TCanvas *pCanvas = new TCanvas;
[/code]

其實剛剛請教了一下 "Google" 大神
打上 pCancas 他會教你滴

這一篇也不錯

delphi.ktop.com.tw/board.php


===================引 用 aee36900 文 章===================
可否稍微解釋一下
pCancas->Handel=hDC;
我需要新增什麼元件還是new什麼嗎?

===================引 用 istillloving 文 章===================
你好:
我剛好跟你寫的差不多呢
但是我覺得你好像陷入困境了
所以我把我搜尋到的讓你參考看看吧


[code cpp]
HDC hDC=GetDC(Panel1->Handle);
pCanvas->Handle=hDC;
//pCanvas->Pen->Mode = pmCopy;
//pCanvas->Pen->Style = psSolid;
//pCanvas->Brush->Style = bsClear;
bmp->Canvas->CopyRect(Panel1->ClientRect,pCanvas,Panel1->ClientRect);

[/code]

其實我學這個是用來實地測試自己專題的......不知道你是用來做啥用的??
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-03-06 12:21:22 IP:220.129.xxx.xxx 訂閱
那我想加入這行呢

http://topic.csdn.net/t/20050119/20/3739144.html

[code cpp]
Bmp->PixelFormat = pf24bit;
[/code]

我們學校也有醫學影像呢 只不過我沒考....=..=

===================引 用 aee36900 文 章===================
我重新試了你的程式碼
可以run
但是我的image沒有東西show出來...
我也無解了...

我放上我的code 可以討論一下
Graphics::TBitmap *BMP = new Graphics::TBitmap;
TCanvas *pCanvas = new TCanvas;
HDC hDC=GetDC(Panel1->Handle);
pCanvas->Handle=hDC;
BMP->Canvas->CopyRect(Panel1->ClientRect,pCanvas,Panel1->ClientRect);
Image1->Picture->Bitmap->Assign(BMP);

by the way
目前我正在
擷取webcam影像並轉存為DICOM(醫學影像檔案)

非常感謝你的參予討論~~

===================引 用 istillloving 文 章===================
抱歉我把宣告的地方分開了

[code cpp]
TCanvas *pCanvas = new TCanvas;
[/code]

其實剛剛請教了一下 "Google" 大神
打上 pCancas 他會教你滴

這一篇也不錯

delphi.ktop.com.tw/board.php


===================引 用 aee36900 文 章===================
可否稍微解釋一下
pCancas->Handel=hDC;
我需要新增什麼元件還是new什麼嗎?

===================引 用 istillloving 文 章===================
你好:
我剛好跟你寫的差不多呢
但是我覺得你好像陷入困境了
所以我把我搜尋到的讓你參考看看吧


[code cpp]
HDC hDC=GetDC(Panel1->Handle);
pCanvas->Handle=hDC;
//pCanvas->Pen->Mode = pmCopy;
//pCanvas->Pen->Style = psSolid;
//pCanvas->Brush->Style = bsClear;
bmp->Canvas->CopyRect(Panel1->ClientRect,pCanvas,Panel1->ClientRect);

[/code]

其實我學這個是用來實地測試自己專題的......不知道你是用來做啥用的??
------
恩...
編輯記錄
istillloving 重新編輯於 2009-03-06 12:23:53, 註解 無‧
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-03-06 15:49:21 IP:203.64.xxx.xxx 訂閱
還是沒東西...
應該跟pixelformat沒關係
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-03-06 18:32:11 IP:220.129.xxx.xxx 訂閱
對了你的
Panel
有連上你的視訊了嗎??
------
恩...
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#15 引用回覆 回覆 發表時間:2009-03-09 09:07:23 IP:203.64.xxx.xxx 訂閱
有的~~
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#16 引用回覆 回覆 發表時間:2009-03-09 10:01:32 IP:140.127.xxx.xxx 訂閱
你好:

你說你的畫板有出現影像?
那應該你有驅動成功了
等等你可以把你全部的程式碼PO出來嗎??
------
恩...
編輯記錄
istillloving 重新編輯於 2009-03-09 10:02:27, 註解 無‧
istillloving 重新編輯於 2009-03-09 10:03:33, 註解 無‧
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#17 引用回覆 回覆 發表時間:2009-03-12 09:59:16 IP:203.64.xxx.xxx 訂閱

[code cpp]
TCanvas *csBuf = new TCanvas;
HDC hDC = GetDC(vc1);
csBuf->Handle = hDC;
Graphics::TBitmap *CapImg = new Graphics::TBitmap();
CapImg->Width = Panel1->Width; //設定大小
CapImg->Height = Panel1->Height;
CapImg->PixelFormat=pf24bit; //設定格式

Image1->Picture->Assign(CapImg);
String a[6] = {".jpg",".jpeg",".bmp",".ico",".emf",".wmf"};
if(SavePictureDialog1->Execute());
{
CapImg->SaveToFile(SavePictureDialog1->FileName a[SavePictureDialog1->FilterIndex]);
ReleaseDC(0, hDC);
delete CapImg;
}[/code]

抱歉這麼晚回覆~
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#18 引用回覆 回覆 發表時間:2009-03-12 19:41:14 IP:140.127.xxx.xxx 訂閱
你好:

如果這是你全部的程式的話我想你應該是沒有驅動你的視訊裝置

請參考這篇

http://leebcb.blogspot.com/search/label/vfw

裡面大部分都用英文解釋 其實我的英文也很爛所以有裝Google工具列可以幫忙翻譯........

想辦法看懂之後 驅動你的視訊裝置然後在capCreateCaptureWindow 裡面 傳入Panel這個物件

Panel有值了 Bmp 就有值了 , Bmp 有值了 Image 也有值了

然後看你是要對Bmp直接做運算 還是再把Image存到Buff裡面做運算

如果你很急的話我看我把我的程式貼上來跟你討論一下好了
------
恩...
編輯記錄
istillloving 重新編輯於 2009-03-12 19:43:08, 註解 無‧
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#19 引用回覆 回覆 發表時間:2009-03-13 09:11:19 IP:203.64.xxx.xxx 訂閱
驅動的部分我已經寫在另外一個button上了
而這個部分我寫再另外一個button
所以...
應該也不是驅動的問題才對...
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#20 引用回覆 回覆 發表時間:2009-03-14 15:16:57 IP:61.223.xxx.xxx 訂閱
我想你還是把全部PO出來
這樣才幫你試吧
------
恩...
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#21 引用回覆 回覆 發表時間:2009-03-20 11:54:25 IP:203.64.xxx.xxx 訂閱
這是我擷取webcam的地方

[code cpp]
vcHWND = capCreateCaptureWindow("Capture Window",WS_CHILD | WS_VISIBLE,
0, 0, Panel1->Width, Panel1->Height, Panel1->Handle, 0); //設定視窗大小
bool ScanDriver = false;
for(int i=0; i<10; i )
{
ScanDriver = capDriverConnect(vcHWND, i);
if(ScanDriver) break;
}
if(!ScanDriver)
ShowMessage("攝影機連接失敗..");
else
{
capPreviewRate(vcHWND, 40);
capPreview(vcHWND, true);
capOverlay(vcHWND, true);
capPreviewScale(vcHWND, true);
}
[/code]

////////////////////////////////////////////////////////////////////
這是我擷取frame的地方


[code cpp]
Graphics::TBitmap *BMP = new Graphics::TBitmap;
BMP->Width=Panel1->Width;
BMP->Height=Panel1->Height;
BMP->Canvas->CopyRect(Rect(0, 0, BMP->Width, BMP->Height),
Canvas, Rect(8, 48, Panel1->Width, Panel1->Height));
Image1->Width=Panel1->Width;
Image1->Height=Panel1->Height;
Image1->Picture->Bitmap->Assign(BMP);
[/code]
/////////////////////////////////////////////////////////////////////////////
原本要用EzCap的
但是發現用在ActiveX卻不能使用
就自己寫

因為EzCap元件是一整個panel
我在使用上無法這樣做
所以定義起始座標(8.48)
當然可以cap到單格影像
但是...影像好像有問題...
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#22 引用回覆 回覆 發表時間:2009-03-20 15:12:51 IP:220.129.xxx.xxx 訂閱
你好:
會不會是你在擷取的地方少到這一行啊

capDriverConnect(hCapWnd,0);//呼叫視訊裝置 0 是編號

我的程式沒有這行 Panel1是沒有畫面的呢
------
恩...
aee36900
一般會員


發表:14
回覆:22
積分:7
註冊:2009-01-16

發送簡訊給我
#23 引用回覆 回覆 發表時間:2009-03-20 17:46:18 IP:203.64.xxx.xxx 訂閱
1.我沒那一行也是有影像
2.現在的問題不再擷取影像,而是copy影像

(真不知道問題出哪阿)
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#24 引用回覆 回覆 發表時間:2009-03-20 23:39:02 IP:218.169.xxx.xxx 訂閱
照你這麼說還真是奇怪......


[code cpp]
HDC hDC=GetDC(Panel1->Handle);
pCanvas->Handle=hDC;
bmp->Canvas->CopyRect(Panel1->ClientRect,pCanvas,Panel1->ClientRect);

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