access violation錯誤訊息,應該如何改正,請指導 |
尚未結案
|
w_1
一般會員 發表:9 回覆:1 積分:2 註冊:2004-11-18 發送簡訊給我 |
代碼如下:
void __fastcall TForm1::SampleGrabber1Buffer(TObject *sender,
double SampleTime, Pointer pBuffer, int BufferLen)
{
HRESULT hr;
PBitmapInfoHeader BIHeaderPtr;
TAMMediaType *MediaType;
HBITMAP hBmp;
Pointer DIBPtr;
PVideoInfoHeader VideoInfoHeader;
TJPEGImage *jpg;
TMemoryStream *memStream;
Image1->Canvas->Lock();
try{
hr=SampleGrabber1->SampleGrabber->GetConnectedMediaType(MediaType); //hr := Grabber.SampleGrabber.GetConnectedMediaType(MediaType);
if(hr!=S_OK )
{
exit(1);
}
try{
if(IsEqualGUID(MediaType->majortype, MEDIATYPE_Video))
BIHeaderPtr=NULL;
if(IsEqualGUID(MediaType->majortype,FORMAT_VideoInfo));
{
if(MediaType->cbFormat==sizeof(TVideoInfoHeader))
{
BIHeaderPtr=&(PVideoInfoHeader(MediaType->pbFormat))->bmiHeader;
}
if(BIHeaderPtr==NULL)
{
exit(1);
}
hBmp=CreateDIBSection(0,(PBitmapInfo)BIHeaderPtr,DIB_RGB_COLORS,&DIBPtr,0,0);
if(hBmp!=0)
{
if(DIBPtr==NULL)
{
exit(1);
} if(BufferLen>(int)BIHeaderPtr->biSizeImage)
{
BufferLen=BIHeaderPtr->biSizeImage;
}
Move(pBuffer,DIBPtr,BufferLen);
Image1->Picture->Bitmap->Handle=hBmp;
}
}
}__finally
{
FreeMediaType(MediaType);
}
memStream= new TMemoryStream;
jpg=new TJPEGImage;
jpg->Assign(Image1->Picture->Bitmap);
jpg->CompressionQuality=10;
jpg->JPEGNeeded();
jpg->Compress();
jpg->SaveToStream(memStream);
jpg->Free();
if(IdTCPClient1->Connected())
{
try{
IdTCPClient1->WriteInteger(memStream->Size);
IdTCPClient1->WriteBuffer(memStream->Memory, memStream->Size,True);
}__except(1)
{
}
}
memStream->Free();
}__finally
{
Image1->Canvas->Unlock();
}
}
報錯信息如圖
請高手在百忙之中指導一下小弟,如何脩改代碼!此問題可以解決!謝謝
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
bearmaster
一般會員 發表:36 回覆:45 積分:16 註冊:2004-05-27 發送簡訊給我 |
Hi w_1, 我不確定那段程式主要功用是什麼, 但似乎是要顯示在螢幕上並且存成 jpeg file. 如果是要顯示及存檔可參考下列方式.
// 假設顯示影像在 Image1 上 void __fastcall TForm1::SampleGrabber1Buffer(TObject *sender, double SampleTime, Pointer pBuffer, int BufferLen) { if (!BufferLen) return; SampleGrabber1->GetBitmap(Image1->Picture->Bitmap, pBuffer, BufferLen); Application->ProcessMessages(); } // 建議不要將存檔或大量運算寫在 SampleGrabber1Buffer() 內, 若要連續 存檔可用 Timer. void __fastcall TForm1::Timer1Timer(TObject *Sender) { Timer1->Enabled=false; // 存成 jpeg file. TJPEGImage *jpg=new TJPEGImage(); jpg->Assign(Image1->Picture->Bitmap); jpg->CompressionQuality=90;//設定 Jpeg 的壓縮品質 jpg->SaveToFile("存檔名稱"); delete jpg; // 存成 bmp file. Image1->Picture->SaveToFile("存檔名稱"); Timer1->Enabled=true; } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |