billmin
一般會員
發表:14 回覆:18 積分:6 註冊:2005-03-20
發送簡訊給我
|
//--------------------------------------------------------------------------- #include
#pragma hdrstop #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1; //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
MediaPlayer1->FileName=OpenDialog1->FileName;
}
MediaPlayer1->Open();
Edit1->Text=MediaPlayer1->Length;
ScrollBar1->Max = MediaPlayer1->Length;
ScrollBar1->Enabled = true;
Edit2->Text=ScrollBar1->Position;
MediaPlayer1->Frames = 1;
MediaPlayer1->Display=Panel1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MediaPlayer1Click(TObject *Sender,
TMPBtnType Button, bool &DoDefault)
{
MediaPlayer1->Frames = 1;
switch (Button)
{
case btPlay:
Timer1->Interval = 5;
Timer1->Enabled = true; break;
case btPause:
Timer1->Enabled = false;
break; case btStop:
Timer1->Enabled = false;
MediaPlayer1->Position=0; break;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{ if(MediaPlayer1->FileName != "")
{
ScrollBar1->Position = MediaPlayer1->Position;
Edit2->Text = MediaPlayer1->Position;
} //把panel上的圖抓下來放在image上 ----------------------------- Graphics::TBitmap *Bmp= new Graphics::TBitmap;;
TCanvas *MyCanvas= new TCanvas;;
HDC dc = GetDC(Panel1->Handle);
TRect rect = Panel1->ClientRect;
MyCanvas->Handle = dc;
Bmp->Width = rect.Right - rect.Left;
Bmp->Height = rect.Bottom - rect.Top; Bmp->Canvas->CopyRect(rect,MyCanvas,rect);
Bmp->PixelFormat=pf24bit;
Image1->Picture->Bitmap->Assign(Bmp); //------------------------------------------------------------- //fullsearch--------------------------------------------------- Graphics::TBitmap *FullSearch_Bmp= new Graphics::TBitmap;;
FullSearch_Bmp->Assign(Bmp);
int i,j;
int n=0;
byte *ptr;
int frame_now[240][320];
int frame_next[240][320]; if((n%2)==0)
{
for(j=0;j< FullSearch_Bmp->Height;j++)
{
ptr = (Byte *)FullSearch_Bmp->ScanLine[j];
for(i=0;iWidth;i++)
{
frame_now[j][i] = 0.299*ptr[i*3+2] +0.587*ptr[i*3+1]+0.114*ptr[i*3];
}
}
}
else
{
for(j=0;j< FullSearch_Bmp->Height;j++)
{
ptr = (Byte *)FullSearch_Bmp->ScanLine[j];
for(i=0;i< FullSearch_Bmp->Width;i++)
{
frame_next[j][i] = 0.299*ptr[i*3+2] +0.587*ptr[i*3+1]+0.114*ptr[i*3];
}
}
}
for(i=0;i<320;i++)
{
for(j=0;j<240;j++)
{
ptr[i*3] = ptr[i*3+1] = ptr[i*3+2]=abs(frame_now[i][j]-frame_next[i][j]);
}
} n++;
Form1->DoubleBuffered=true ;
delete Bmp; } 然後一直出現
請問一下要如何修改阿 = =" 發表人 - billmin 於 2005/09/18 02:58:46
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
您好:
您圖片是320*240還是240*320呢? 您處理的範圍似乎顛倒了
|
billmin
一般會員
發表:14 回覆:18 積分:6 註冊:2005-03-20
發送簡訊給我
|
= ="
果然是寫反了...
不過我想問一下...
我這樣寫會不會有問題...
怎麼我用這樣寫...
好像都是讀到同一張frame...
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
您好:
因為您的程式沒有辦法進入(n%2)==1的情況
解決方式有兩種,1.n設為全域變數,2.加上static修飾
P.S:您有很多地方記憶體都沒有歸還(有new但沒有delete)
|
billmin
一般會員
發表:14 回覆:18 積分:6 註冊:2005-03-20
發送簡訊給我
|
我把它改成下面模樣...
不過好像沒什麼插ㄝ = ="
不好意思在麻煩一下taishyang大大幫我看一下 //--------------------------------------------------------------------------- #include
#include <math.h>
#pragma hdrstop #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
int n;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{ }
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
MediaPlayer1->FileName = OpenDialog1->FileName; }
//MediaPlayer1->Frames = FramesJump->Position; MediaPlayer1->Open();
Edit1->Text=MediaPlayer1->Length;
ScrollBar1->Enabled = true;
ScrollBar1->SetFocus();
ScrollBar1->Max = MediaPlayer1->Length;
MediaPlayer1->Frames = 1;
Edit2->Text = MediaPlayer1->Position; MediaPlayer1->Display = Panel1; //Set display device to a TPanel
}
//--------------------------------------------------------------------------- void __fastcall TForm1::MediaPlayer1Click(TObject *Sender,
TMPBtnType Button, bool &DoDefault)
{
//MediaPlayer1->Frames = 100;
switch (Button)
{
case btPlay:
Timer1->Interval = 5;
Timer1->Enabled = true; break;
case btPause:
Timer1->Enabled = false;
break;
} }
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
n ;
if(MediaPlayer1->FileName != "")
{
ScrollBar1->Position = MediaPlayer1->Position;
Edit2->Text = MediaPlayer1->Position;
} Graphics::TBitmap *Bmp= new Graphics::TBitmap;;
TCanvas *MyCanvas= new TCanvas;;
HDC dc = GetDC(Panel1->Handle);
TRect rect = Panel1->ClientRect;
MyCanvas->Handle = dc;
Bmp->Width = rect.Right - rect.Left;
Bmp->Height = rect.Bottom - rect.Top; Bmp->Canvas->CopyRect(rect,MyCanvas,rect);
Bmp->PixelFormat=pf24bit;
Image1->Picture->Bitmap->Assign(Bmp); //------------------------------------------------------------- Graphics::TBitmap *FullSearch_Bmp= new Graphics::TBitmap;;
FullSearch_Bmp->Assign(Bmp);
int i,j;
byte *ptr;
int frame_now[240][320];
int frame_next[240][320]; if((n%2)==0)
{
for(j=0;j< FullSearch_Bmp->Height;j )
{
ptr = (Byte *)FullSearch_Bmp->ScanLine[j];
for(i=0;iWidth;i )
{
frame_now[j][i] = 0.299*ptr[i*3 2] 0.587*ptr[i*3 1] 0.114*ptr[i*3];
}
}
}
else
{
for(j=0;j< FullSearch_Bmp->Height;j )
{
ptr = (Byte *)FullSearch_Bmp->ScanLine[j];
for(i=0;i< FullSearch_Bmp->Width;i )
{
frame_next[j][i] = 0.299*ptr[i*3 2] 0.587*ptr[i*3 1] 0.114*ptr[i*3];
}
}
}
for(i=0;i<240;i )
{
for(j=0;j<320;j )
{
ptr[i*3] = ptr[i*3 1] = ptr[i*3 2]=abs(frame_now[i][j]-frame_next[i][j]);
}
}
Form1->DoubleBuffered=true ;
delete Bmp;
delete MyCanvas;
delete FullSearch_Bmp; }
//---------------------------------------------------------------------------
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
您好: 您最後填圖的程式碼有問題(應該還要用到ScanLine)
for(i=0;i<240;i )
{
for(j=0;j<320;j )
{
ptr[i*3] = ptr[i*3 1] = ptr[i*3 2]=abs(frame_now[i][j]-frame_next[i][j]);
}
} 我沒有Trace您的程式碼,所以您可以先Trace您的程式碼看看..
看哪邊不合理就知道問題在哪邊了
class="code">
for(j=0;j< FullSearch_Bmp->Height;j )
{
ptr = (Byte *)FullSearch_Bmp->ScanLine[j];
for(i=0;i Width;i )
{
if ((n%2)==0)
frame_now[j][i] = 0.299*ptr[i*3 2] 0.587*ptr[i*3 1] 0.114*ptr[i*3];
else
frame_next[j][i] = 0.299*ptr[i*3 2] 0.587*ptr[i*3 1] 0.114*ptr[i*3];
}
}
|
billmin
一般會員
發表:14 回覆:18 積分:6 註冊:2005-03-20
發送簡訊給我
|
感謝taishyang兄
我弄出來了 ^^ taishyang兄你是中原的??
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
引言:taishyang兄你是中原的?? 是滴
|
billmin
一般會員
發表:14 回覆:18 積分:6 註冊:2005-03-20
發送簡訊給我
|
呵呵...
學長好...^^
我也是中原低...
不過我是電機的...
|
billmin
一般會員
發表:14 回覆:18 積分:6 註冊:2005-03-20
發送簡訊給我
|
我又發現怪怪的地方了 = ="
為什麼當我開完檔案...
然後iamge1元件上會出現怪怪的點阿...
在播放影像相減結果的時候那些點也都還在說...
看起來實在粉礙眼 >"<
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
引言:
我又發現怪怪的地方了 = ="
為什麼當我開完檔案...
然後iamge1元件上會出現怪怪的點阿...
在播放影像相減結果的時候那些點也都還在說...
看起來實在粉礙眼 >"< 這似乎不是原來的問題所影響的,所以請開新標題發問
開檔的過程您也沒有交代清楚
|