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

使用多執行緒擷取圖片亮度

尚未結案
ytasmallmf
一般會員


發表:33
回覆:39
積分:14
註冊:2008-12-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-01-05 16:25:05 IP:60.249.xxx.xxx 訂閱
小弟開一個TimerThread去計算某張圖片的亮度值,剛開使很順但是到最後會卡住
所以要請教有經驗的大大是不是哪個地方我沒注意到的。
[code cpp]
long TCatchCamera::GetLightValue(int _OrgX, int _OrgY)
{
Byte *ptr=NULL;
double _ulAddR=0,_ulAddG=0,_ulAddB=0,_ulAddI=0;
int Addcount=0;
long _lLightValue=0;
long _lXlength,_lYlength;
if(CatchCamera->CheckBox1->Checked==true)
{
_lXlength=10;
_lYlength=10;
}
else
{
_lXlength=(_OrgX _lViewPercent)-(_OrgX-_lViewPercent);
_lYlength=(_OrgY (int)(_lViewPercent*0.75))-(_OrgY-(int)(_lViewPercent*0.75));
}
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
CatchCamera->EzCapCamera1->CapBitmapFrame(pBitmap);
for (int y = _OrgY-(int)_lYlength;
y < _OrgY (int)_lYlength; y )
{

ptr = (Byte *)pBitmap->ScanLine[y];
for (int x = _OrgX-(int)_lXlength;
x < _OrgX (int)_lXlength; x )
{
_ulAddB=GetBValue(ptr[x]);
_ulAddG=GetGValue(ptr[x]);
_ulAddR=GetRValue(ptr[x]);
_ulAddI=_ulAddI (_ulAddR _ulAddG _ulAddB)/3; //計算Intensity(亮度)
}

}
_lLightValue=_ulAddI/(_lXlength*_lYlength);
delete pBitmap;
return _lLightValue;
}

void __fastcall TTimerThread::Execute()
{
SetName();
//---- Place thread code here ----
while(1)
{
// Sleep(100);
if(CatchCamera->CheckBox1->Checked==true)
{
// if(((CatchCamera->_MouseX 10 < 640) && (CatchCamera->_MouseX-10 > 0))
// && ((CatchCamera->_MouseY 10 < 480) && (CatchCamera->_MouseY-10 > 0)))
// {
// CatchCamera->_lLightValue[0]=CatchCamera->GetLightValue(CatchCamera->_MouseX,
// CatchCamera->_MouseY);
// }
}
else
{
CatchCamera->GetLightValue();
}
}
}
[/code]
編輯記錄
ytasmallmf 重新編輯於 2009-01-05 16:25:47, 註解 無‧
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-01-05 20:05:56 IP:118.169.xxx.xxx 訂閱
當你執行緒有用到VCL元件的話,會有同步的問題,你新增的執行緒裡面會有這段說明
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall UsbThread::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
ytasmallmf
一般會員


發表:33
回覆:39
積分:14
註冊:2008-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-01-06 08:30:30 IP:60.249.xxx.xxx 訂閱
了解,所以說我要把他們個別分開來寫囉。我先去試看看
系統時間:2024-04-26 5:39:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!