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

如何在放avi的時候擷取每次影像的一列RGB值

尚未結案
517
一般會員


發表:1
回覆:0
積分:0
註冊:2003-10-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-23 16:50:42 IP:163.28.xxx.xxx 未訂閱
各位大大         我在form上面放置了一個panel來撥放avi檔  除此以外撥放的同時 如果是單步撥放的話  會把影像每次單步撥放的影像,做處理後放置到image上面,現在有一個問題是  我要用scanline去掃描每一次單步撥放時  影像中一列的RGB值 比如說320*240的影像  我現在只要在水平掃描線上120那列的RGB值 來做處理 但是我執行結果總覺得取RGB的方式有錯  希望各位能給我指教阿    
 
void __fastcall TForm1::MdPlayerClick(TObject *Sender, TMPBtnType Button,
      bool &DoDefault)
{
    Graphics::TBitmap *Bitmap1;
    TCanvas *MyCanvas;
    HDC dc;
    TRect rect;
    UpdataTrackBar();
    int r,g,b;
    Byte *ptr1;
    if((Button = btBack)||(Button = btStep))
    {
        try
        {                Bitmap1 = new Graphics::TBitmap ;
            MyCanvas =new TCanvas ;
            TRect   MyRect;
            MyRect = Rect(0,0,240,320);
            rect = MdPlayer->DisplayRect ;
            dc = GetDC(Panel1->Handle);
            MyCanvas->Handle = dc;
            Bitmap1->Width = 320 ;
            Bitmap1->Height = 240 ;
            Bitmap1->Canvas->CopyRect(rect,MyCanvas,rect);
            name1 = Path   "-temp"  ".bmp";
            Form1->Image1->Canvas->Draw(0,0,Bitmap1);
            Image1->Picture->SaveToFile(name1);
            Bitmap1->LoadFromFile(name1);
            Image1->Picture->LoadFromFile(name1);          int y=120;
      ptr=(byte*)Bitmap1->ScanLine[y];
      for(int x=0;x<=320;x  )  
      {
       ptr[3*x]=*(ptr 3*x);//分別讀取當j=120時,在不同i列時的R,G,B值.
       ptr[3*x 2]=*(ptr 3*x 2);
       ptr[3*x 1]=*(ptr 3*x 1);
       r=ptr[3*x];
       g=ptr[3*x 1];
       b=ptr[3*x 2];
   //上述取出那一列rgb值的方法  是否正確呢 謝謝
       R1[x]=r;
       G1[x]=g;
       B1[x]=b;
     }
}    
發表人 - 517 於 2003/10/23 17:00:45
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-23 16:56:18 IP:140.135.xxx.xxx 未訂閱
517您好: 請參考下面的聯結做適當的修改 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=39009 謝謝您的配合
taishyang
站務副站長


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-23 17:12:08 IP:140.135.xxx.xxx 未訂閱
517您好: 若您要取的第120列的RGB值請參考下面的code
Graphics::TBitmap* BMP=new Graphics::TBitmap();
 BMP->LoadFromFile("0.bmp");
 Byte* ptr;
 ptr=(Byte*)BMP->ScanLine[120];
 for (int x=0;xWidth ;x  )
 {
  Memo1->Lines->Add(IntToStr(ptr[x*3 2]) " " IntToStr(ptr[x*3 1]) " " IntToStr(ptr[x*3]));
 }
 delete BMP;
順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~
系統時間:2024-05-01 2:44:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!