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

如何Real Time處理 Avi檔案?

尚未結案
kikikoko
一般會員


發表:4
回覆:8
積分:2
註冊:2003-05-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-30 14:12:52 IP:140.126.xxx.xxx 未訂閱
想請問各前輩們    我的程式需要Real Time處理,input為Avi檔, 我用下面的程式碼  if(Fetchf)     {         try         {             MyBmp = new Graphics::TBitmap;             MyCanvas =new TCanvas;             rect = MediaPlayer1->DisplayRect;             dc = GetDC(Panel1->Handle);             MyCanvas->Handle = dc;             MyBmp->Width = rect.Right - rect.Left;             MyBmp->Height = rect.Bottom - rect.Top;             MyBmp->Canvas->CopyRect(rect,MyCanvas,rect);             for(i=0;iHeight;i ) { for(j=0;jWidth;j ) { r=MyBmp->Canvas->Pixels[j][i]&0x0000ff; g=MyBmp->Canvas->Pixels[j][i]>>8&0x0000ff; b=MyBmp->Canvas->Pixels[j][i]>>16&0x0000ff; temp = 0.299*(float)r 0.587*(float)g 0.114*(float)b; img1[i][j] = temp; } } for(i=0; iHeight; i ) { ptr = (Byte*)Image2->Picture->Bitmap->ScanLine[i]; for(j=0; jWidth; j ) { ptr[j*3]=BYTE(img1[i][j]); ptr[j*3 1]=BYTE(img1[i][j]); ptr[j*3 2]=BYTE(img1[i][j]); } } Image2->Repaint(); } } 可以正確將img1貼在一張Image2上,但速度很慢。 好像是因為讀Canvas上的每一點速度太慢了。 若改成用ScanLine的方式速度就很正常,但show出來的圖會有很多直線條,好奇怪!有沒有哪位前輩可以幫幫我,謝謝!
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-30 15:23:56 IP:140.135.xxx.xxx 未訂閱
kikikoko您好:   可以將您的轉灰階部分也用scanline的方式試看看   能不能將出現線條的圖片上傳來看看...  
 
for(j=0;j< Height;j  )
{
  ptr = (Byte *)Bmp->ScanLine[j];
  for(i=0;i< Width;i  )
    {
    b=ptr[i*3];
    g=ptr[i*3 1];
    r=ptr[i*3 2];
    temp=0.299*r  0.587*g 0.114*b;
    ptr[i*3]=(Byte)temp;
    ptr[i*3 1]=(Byte)temp;
    ptr[i*3 2]=(Byte)temp;
    }
 }
 
順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
kikikoko
一般會員


發表:4
回覆:8
積分:2
註冊:2003-05-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-30 16:42:02 IP:140.126.xxx.xxx 未訂閱
taishyang 您好 我所說的"若改成用ScanLine的方式速度就很正常,但show出來的圖會有很多直線條"就是這樣做的。
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-30 16:47:15 IP:140.135.xxx.xxx 未訂閱
kikikoko您好:   方便將您的Project上傳至[會員求助程式檔案上傳區]嗎??   http://delphi.ktop.com.tw/forum.asp?FORUM_ID=97 我試看看 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
kikikoko
一般會員


發表:4
回覆:8
積分:2
註冊:2003-05-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-30 17:13:35 IP:140.126.xxx.xxx 未訂閱
我已經上傳了,謝謝!
taishyang
站務副站長


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-30 23:49:31 IP:140.135.xxx.xxx 未訂閱
kikikoko您好:   試試加入 MyBmp->PixelFormat=pf24bit;    看看還會不會有很多直線條的情況.. 我已經能用scanline的方式對一avi檔做灰階化處理了 我用的是MS 的MediaPlayer...因為我的BCB MediaPlayer壞掉了 [程式碼]修改來自您的 class="code"> void __fastcall TForm1::Timer1Timer(TObject *Sender) { int i,j,r,g,b,temp; byte *ptr; Graphics::TBitmap *MyBmp= new Graphics::TBitmap;; TCanvas *MyCanvas= new TCanvas;; HDC dc = GetDC(MediaPlayernew1->Handle); TRect rect = MediaPlayernew1->ClientRect; MyCanvas->Handle = dc; MyBmp->Width = rect.Right - rect.Left; MyBmp->Height = rect.Bottom - rect.Top; MyBmp->Canvas->CopyRect(rect,MyCanvas,rect); MyBmp->PixelFormat=pf24bit; Graphics::TBitmap* Bmp=new Graphics::TBitmap(); Bmp->Assign(MyBmp); for(j=0;j< Bmp->Height;j++) { ptr = (Byte *)Bmp->ScanLine[j]; for(i=0;i< Bmp->Width;i++) { b=ptr[i*3]; g=ptr[i*3+1]; r=ptr[i*3+2]; temp=0.299*r +0.587*g+0.114*b; ptr[i*3]=(Byte)temp; ptr[i*3+1]=(Byte)temp; ptr[i*3+2]=(Byte)temp; Image1->Picture->Bitmap->Assign(Bmp); } } delete Bmp; delete MyBmp; delete MyCanvas; } [圖示] 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
kikikoko
一般會員


發表:4
回覆:8
積分:2
註冊:2003-05-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-31 01:29:33 IP:218.168.xxx.xxx 未訂閱
taishyang 您好 成功了,謝謝!
系統時間:2024-04-27 13:06:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!