Compare commits
No commits in common. 'master' and 'vector' have entirely different histories.
10 changed files with 45 additions and 619 deletions
@ -1,84 +0,0 @@ |
|||||||
//---------------------------------------------------------------------------
|
|
||||||
#include <math.h> |
|
||||||
#include <tchar.h> |
|
||||||
#include <windows.h> |
|
||||||
#include <vfw.h> |
|
||||||
|
|
||||||
#pragma hdrstop |
|
||||||
|
|
||||||
#include "AVIWrite.h" |
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#pragma package(smart_init) |
|
||||||
#define LENG 10 |
|
||||||
#define PIXELS 100 |
|
||||||
#define WIDTH 160 |
|
||||||
#define HEIGHT 120 |
|
||||||
#define LINE ((((WIDTH)*24+31)&~31)/8) |
|
||||||
#define SIZEIMAGE (LINE*(HEIGHT)) |
|
||||||
|
|
||||||
AVISTREAMINFO si={streamtypeVIDEO,comptypeDIB,0,0,0,0, |
|
||||||
1,10,0,LENG,0,0,(DWORD)-1,0,{0,0,WIDTH,HEIGHT},0,0,_T("Video #1")}; |
|
||||||
BITMAPINFOHEADER bmih={sizeof(BITMAPINFOHEADER),WIDTH,HEIGHT,1,24,BI_RGB, |
|
||||||
SIZEIMAGE,0,0,0,0}; |
|
||||||
//BYTE bBit[SIZEIMAGE];
|
|
||||||
PAVIFILE pavi; |
|
||||||
PAVISTREAM pstm; |
|
||||||
int line,sizeimage; |
|
||||||
|
|
||||||
int AVIWritePrepare(int width,int height,int length, char* filename) |
|
||||||
{ |
|
||||||
//memset(bBit,0,SIZEIMAGE);
|
|
||||||
//AVIFileInit();
|
|
||||||
|
|
||||||
si.dwLength = length; |
|
||||||
|
|
||||||
si.rcFrame.left = 0; //{ 0,0,width,height};
|
|
||||||
si.rcFrame.top = 0; |
|
||||||
si.rcFrame.right = width; |
|
||||||
si.rcFrame.bottom = height; |
|
||||||
|
|
||||||
bmih.biWidth = width; |
|
||||||
bmih.biHeight = height; |
|
||||||
line = ((width*24+31)&~31)/8; |
|
||||||
sizeimage = line*height; |
|
||||||
bmih.biSizeImage = sizeimage; // can be zero?
|
|
||||||
|
|
||||||
//AVIFileInit();
|
|
||||||
|
|
||||||
if (AVIFileOpen(&pavi,(LPCWSTR)filename, |
|
||||||
OF_CREATE | OF_WRITE | OF_SHARE_DENY_NONE,NULL)!=0) |
|
||||||
return 1; |
|
||||||
if (AVIFileCreateStream(pavi,&pstm,&si)!=0) |
|
||||||
return 1; |
|
||||||
if (AVIStreamSetFormat(pstm,0,&bmih,sizeof(BITMAPINFOHEADER))!=0) |
|
||||||
return 1; |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
int AVIWriteaFrame(int i,char *buffer) |
|
||||||
{ |
|
||||||
if( !buffer ){ |
|
||||||
//ShowMessage("buffer is invalid");
|
|
||||||
return 1; |
|
||||||
} |
|
||||||
if( AVIStreamWrite(pstm,i,1,buffer,sizeimage, |
|
||||||
AVIIF_KEYFRAME,NULL,NULL)!=0) |
|
||||||
return 1; |
|
||||||
return 0; |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
int AVIWriteFinish(void) |
|
||||||
{ |
|
||||||
AVIStreamRelease(pstm); |
|
||||||
AVIFileRelease(pavi); |
|
||||||
//AVIFileExit();
|
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,11 +0,0 @@ |
|||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#ifndef AVIWriteH |
|
||||||
#define AVIWriteH |
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
#endif |
|
||||||
|
|
||||||
int AVIWritePrepare(int width,int height,int length, char* filename); |
|
||||||
int AVIWriteaFrame(int frame,char *buffer); |
|
||||||
int AVIWriteFinish(void); |
|
||||||
|
|
@ -1,118 +0,0 @@ |
|||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/*
|
|
||||||
$Log: not supported by cvs2svn $ |
|
||||||
Revision 1.3 2005/03/08 05:55:08 nao |
|
||||||
same strategy as aviimage using AVIStreamOpenFromFile instead of |
|
||||||
AVIFileOpen and AVIFileGetStream for suppress of FD access? |
|
||||||
|
|
||||||
|
|
||||||
*/ |
|
||||||
|
|
||||||
|
|
||||||
//#include <vcl.h>
|
|
||||||
#include <stdio.h> |
|
||||||
#include <tchar.h> |
|
||||||
#include <vfw.h> |
|
||||||
#include "aviimage.h" |
|
||||||
|
|
||||||
aviimage::aviimage() |
|
||||||
{ |
|
||||||
AVIFileInit(); |
|
||||||
} |
|
||||||
|
|
||||||
aviimage::aviimage(wchar_t* fname) |
|
||||||
{ |
|
||||||
wVideo=~0; |
|
||||||
AVIFileInit(); |
|
||||||
AVIStreamOpenFromFile(&pstm,fname,streamtypeVIDEO,0,OF_READ,NULL); |
|
||||||
// AVIFileOpen(&pavi,fname,OF_READ | OF_SHARE_DENY_NONE,NULL);
|
|
||||||
// AVIFileOpen(&pavi,fname,OF_READ ,NULL);
|
|
||||||
// if (AVIFileInfo(pavi,&fi,sizeof(AVIFILEINFO))!=0)
|
|
||||||
// ShowMessage("AVIFileInfo error");
|
|
||||||
// for (dwStream=0;dwStream<fi.dwStreams;dwStream++) {
|
|
||||||
// if (AVIFileGetStream(pavi,&ptmp,0,dwStream)!=0)
|
|
||||||
// ShowMessage("");
|
|
||||||
// if (AVIStreamInfo(ptmp,&si,sizeof(AVISTREAMINFO))!=0)
|
|
||||||
// ShowMessage("");
|
|
||||||
// switch (si.fccType) {
|
|
||||||
// case streamtypeVIDEO:
|
|
||||||
// if (pstm==NULL || si.wPriority<wVideo) {
|
|
||||||
// if (pstm!=NULL)
|
|
||||||
// AVIStreamRelease(pstm);
|
|
||||||
// pstm=ptmp;
|
|
||||||
// wVideo=si.wPriority;
|
|
||||||
// }
|
|
||||||
// continue;
|
|
||||||
// }
|
|
||||||
// AVIStreamRelease(ptmp);
|
|
||||||
// }
|
|
||||||
// above code will not function in Windows XP
|
|
||||||
// it works in 95 and/or 98se mode only
|
|
||||||
//
|
|
||||||
// if(AVIFileGetStream(pavi,&pstm,streamtypeVIDEO,0)!=0)
|
|
||||||
// ShowMessage("AVIFileGetStream");
|
|
||||||
|
|
||||||
if (pstm==NULL) |
|
||||||
ShowMessage("pstm NULL"); |
|
||||||
if ((pfrm=AVIStreamGetFrameOpen(pstm,NULL))==NULL) |
|
||||||
ShowMessage("GetFrameOpen"); |
|
||||||
lStart=AVIStreamStart(pstm); |
|
||||||
lEnd=AVIStreamLength(pstm)+lStart -1; // oops
|
|
||||||
if ((pbmih=(LPBITMAPINFOHEADER)AVIStreamGetFrame(pfrm,0))==NULL) |
|
||||||
ShowMessage("GetFrame error"); |
|
||||||
frect.top = 0; |
|
||||||
frect.left = 0; |
|
||||||
frect.bottom = pbmih->biHeight-1; |
|
||||||
frect.right = pbmih->biWidth-1; |
|
||||||
|
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
void aviimage::saveaframe(long fnum, TMemoryStream* out) |
|
||||||
{ |
|
||||||
BITMAPFILEHEADER bmfh; |
|
||||||
|
|
||||||
if ((pbmih=(LPBITMAPINFOHEADER)AVIStreamGetFrame(pfrm,fnum))==NULL) |
|
||||||
ShowMessage("GetFrame error"); |
|
||||||
|
|
||||||
bmfh.bfType=0x4d42; |
|
||||||
bmfh.bfReserved1=bmfh.bfReserved2=0; |
|
||||||
if (pbmih->biClrUsed==0) |
|
||||||
switch (pbmih->biBitCount) { |
|
||||||
case 1:bmfh.bfOffBits=sizeof(RGBQUAD)*2;break; |
|
||||||
case 4:bmfh.bfOffBits=sizeof(RGBQUAD)*16;break; |
|
||||||
case 8:bmfh.bfOffBits=sizeof(RGBQUAD)*256;break; |
|
||||||
case 24:bmfh.bfOffBits=0;break; |
|
||||||
case 16: |
|
||||||
case 32: |
|
||||||
bmfh.bfOffBits=pbmih->biCompression==BI_RGB?0:sizeof(DWORD)*3; |
|
||||||
} |
|
||||||
else |
|
||||||
bmfh.bfOffBits=pbmih->biClrUsed*sizeof(RGBQUAD); |
|
||||||
bmfh.bfOffBits+=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); |
|
||||||
bmfh.bfSize=bmfh.bfOffBits+(pbmih->biSizeImage==0 |
|
||||||
?((pbmih->biWidth*pbmih->biBitCount+31)&~31)/8*abs(pbmih->biHeight) |
|
||||||
:pbmih->biSizeImage); |
|
||||||
out->Write(&bmfh,sizeof(BITMAPFILEHEADER)); |
|
||||||
out->Write(pbmih,bmfh.bfSize-sizeof(BITMAPFILEHEADER)); |
|
||||||
out->Seek(0,soFromBeginning); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void aviimage::finish() |
|
||||||
{ |
|
||||||
if (AVIStreamGetFrameClose(pfrm)!=0) |
|
||||||
ShowMessage(""); |
|
||||||
AVIStreamRelease(pstm); |
|
||||||
AVIFileRelease(pavi); |
|
||||||
AVIFileExit(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,36 +0,0 @@ |
|||||||
#ifndef AVIIMAGEH |
|
||||||
#define AVIIMAGEH |
|
||||||
|
|
||||||
//#include <vcl.h>
|
|
||||||
#include <stdio.h> |
|
||||||
#include <tchar.h> |
|
||||||
#include <vfw.h> |
|
||||||
|
|
||||||
|
|
||||||
class aviimage |
|
||||||
{ |
|
||||||
AVIFILEINFO fi; |
|
||||||
AVISTREAMINFO si; |
|
||||||
CHAR szFile[MAX_PATH]; |
|
||||||
DWORD dwStream; |
|
||||||
TRect frect; |
|
||||||
LONG i,lStart,lEnd; |
|
||||||
LPBITMAPINFOHEADER pbmih; |
|
||||||
PAVIFILE pavi; |
|
||||||
PAVISTREAM pstm,ptmp; |
|
||||||
PGETFRAME pfrm; |
|
||||||
WORD wVideo; |
|
||||||
|
|
||||||
public: |
|
||||||
aviimage(); |
|
||||||
aviimage(wchar_t* filename); |
|
||||||
TRect getframerect() { return frect; } |
|
||||||
long getfirst() { return lStart ; } |
|
||||||
long getlast() { return lEnd; } |
|
||||||
void saveaframe(long framenum, TMemoryStream* mem); |
|
||||||
void finish(); |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
||||||
|
|
||||||
|
|
@ -1,151 +0,0 @@ |
|||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include <vcl.h> |
|
||||||
#pragma hdrstop |
|
||||||
#include "aviimage.h" |
|
||||||
#include "AVIWrite.h" |
|
||||||
|
|
||||||
#include "Unit1.h" |
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
#pragma package(smart_init) |
|
||||||
#pragma resource "*.dfm" |
|
||||||
TForm1 *Form1; |
|
||||||
aviimage* work; |
|
||||||
int iw,ih; |
|
||||||
int start,fend; |
|
||||||
|
|
||||||
void playbackavi(aviimage*,int,int); |
|
||||||
void dispaframe(aviimage*, int); |
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
void __fastcall TForm1::WMDROPFILES(TWMDropFiles Msg) |
|
||||||
{ |
|
||||||
|
|
||||||
int i; |
|
||||||
char buf[MAX_PATH]; |
|
||||||
TRect f; |
|
||||||
//int iw,ih;
|
|
||||||
|
|
||||||
|
|
||||||
//ドラッグされたファイルの個数
|
|
||||||
int cnt=::DragQueryFile((HDROP)Msg.Drop,0xFFFFFFFF,NULL,0); |
|
||||||
|
|
||||||
for(int i=0;i<cnt;i++){ |
|
||||||
::DragQueryFile((HDROP)Msg.Drop, i,buf,sizeof(buf)); |
|
||||||
// bufにファイル名が入っている
|
|
||||||
Memo1->Lines->Add(AnsiString(buf)); |
|
||||||
|
|
||||||
if( ExtractFileExt(buf) == ".avi" ){ |
|
||||||
work = new aviimage(buf); |
|
||||||
|
|
||||||
//f = AVIImage1->Frame;
|
|
||||||
f = work->getframerect(); |
|
||||||
iw = f.Width(); |
|
||||||
ih = f.Height(); |
|
||||||
start = work->getfirst(); |
|
||||||
fend = work->getlast(); |
|
||||||
Memo1->Lines->Add("Avi file: "+AnsiString(iw)+"x"+AnsiString(ih)); |
|
||||||
Memo1->Lines->Add("start: " + IntToStr(start) + "to " + IntToStr(fend)); |
|
||||||
|
|
||||||
TrackBar1->Min = start; |
|
||||||
TrackBar1->Max = fend; |
|
||||||
dispaframe(work,start); |
|
||||||
//playbackavi(work,start,fend);
|
|
||||||
//playbackavi(work,start,end);
|
|
||||||
//delete work;
|
|
||||||
} |
|
||||||
else if( ExtractFileExt(buf) == ".roi" ){ |
|
||||||
Memo1->Lines->Add("Roi file"); |
|
||||||
} |
|
||||||
else if( ExtractFileExt(buf) == ".bmp" ){ |
|
||||||
Image1->Picture->LoadFromFile(buf); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
__fastcall TForm1::TForm1(TComponent* Owner) |
|
||||||
: TForm(Owner) |
|
||||||
{ |
|
||||||
DragAcceptFiles(Handle,True); |
|
||||||
Memo1->Lines->Clear(); |
|
||||||
|
|
||||||
} |
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void dispaframe(aviimage* avi,int framenum) |
|
||||||
{ |
|
||||||
//TWICImage* twic = new TWICImage();
|
|
||||||
TImage* targeti; |
|
||||||
TMemoryStream* temp = new TMemoryStream(); |
|
||||||
TBitmap* first = new TBitmap(); |
|
||||||
|
|
||||||
targeti = Form1->Image1; |
|
||||||
targeti->Picture->Bitmap->PixelFormat=pf24bit; // should be 8bit
|
|
||||||
targeti->Width = iw; |
|
||||||
targeti->Picture->Bitmap->Width = iw; |
|
||||||
targeti->Height=ih; |
|
||||||
targeti->Picture->Bitmap->Height = ih; |
|
||||||
|
|
||||||
first->Width = iw; |
|
||||||
first->Height = ih; |
|
||||||
|
|
||||||
Form1->Label1->Caption = IntToStr(framenum); |
|
||||||
|
|
||||||
avi->saveaframe(framenum,temp); |
|
||||||
temp->Position = 0; |
|
||||||
first->LoadFromStream(temp); |
|
||||||
|
|
||||||
//targeti->Picture->Bitmap->LoadFromStream(temp);
|
|
||||||
Form1->Label2->Caption = IntToStr(first->Width); |
|
||||||
Form1->Label3->Caption = IntToStr(first->Height); |
|
||||||
Form1->Image1->Picture->Bitmap->Assign(first); |
|
||||||
targeti->Refresh(); |
|
||||||
|
|
||||||
|
|
||||||
} |
|
||||||
void playbackavi(aviimage* avi,int start, int end) |
|
||||||
{ |
|
||||||
TWICImage* twic = new TWICImage(); |
|
||||||
TImage* targeti; |
|
||||||
TMemoryStream* temp = new TMemoryStream(); |
|
||||||
|
|
||||||
targeti = Form1->Image1; |
|
||||||
targeti->Picture->Bitmap->PixelFormat=pf24bit; // should be 8bit
|
|
||||||
targeti->Width = iw; |
|
||||||
targeti->Picture->Bitmap->Width = iw; |
|
||||||
targeti->Height=ih; |
|
||||||
targeti->Picture->Bitmap->Height = ih; |
|
||||||
|
|
||||||
|
|
||||||
for( int i = start ; i < end ; i++ ){ |
|
||||||
Form1->Label1->Caption = IntToStr(i); |
|
||||||
dispaframe(avi,i); |
|
||||||
//Application->ProcessMessages();
|
|
||||||
//targeti->Refresh();
|
|
||||||
//Form1->Invalidate();
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
} |
|
||||||
void __fastcall TForm1::TrackBar1Change(TObject *Sender) |
|
||||||
{ |
|
||||||
Label1->Caption = IntToStr(TrackBar1->Position); |
|
||||||
Edit1->Text = IntToStr(TrackBar1->Position); |
|
||||||
dispaframe(work,TrackBar1->Position); |
|
||||||
|
|
||||||
} |
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
void __fastcall TForm1::Edit1Exit(TObject *Sender) |
|
||||||
{ |
|
||||||
Label1->Caption = Edit1->Text; |
|
||||||
TrackBar1->Position = StrToInt(Edit1->Text); |
|
||||||
if( StrToInt(Edit1->Text) < fend ) |
|
||||||
dispaframe(work,StrToInt(Edit1->Text)); |
|
||||||
} |
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
Loading…
Reference in new issue