求avi转bmp和bmp转avi的控件,非常着急,在线等待 求avi转bmp和bmp转avi的控件,非常着急,在线等待 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实最重要的是你要分析AVI格式,这样就好做多了,下面给你一段读取AVI每一帧图片的代码,你参考一下:uses windows, graphics;interfaceconst streamtypeAUDIO : longint = $73647561; streamtypeVIDEO : longint = $73646976;type TAVIStream = record fccType : longint; fccHandler : longint; dwFlags : longint; dwCaps : longint; wPriority : word; wLanguage : word; dwScale : longint; dwRate : longint; dwStart : longint; dwLength : longint; dwInitialFrames : longint; dwSuggestedBufferSize : longint; dwQuality : longint; dwSampleSize : longint; rcFrame : TRect; dwEditCount : longint; dwFormatChangeCount : longint; Name : array [0..64] of char; end; PAVIStream = ^TAVIStream; PAVIFile = pointer; TAVIFileInfo = record dwMaxBytesPerSec : longint; dwFlags : longint; dwCaps : longint; dwStreams : longint; dwSuggestedBufferSize : longint; dwWidth : longint; dwHeight : longint; dwScale : longint; dwRate : longint; dwLength : longint; dwEditCount : longint; szFileType : array[0..63] of char; end; PAVIFileInfo = ^TAVIFileInfo; TAVIStreamInfo = record fccType : longint; fccHandler : longint; dwFlags : longint; dwCaps : longint; wPriority : word; wLanguage : word; dwScale : longint; dwRate : longint; dwStart : longint; dwLength : longint; dwInitialFrames : longint; dwSuggestedBufferSize : longint; dwQuality : longint; dwSampleSize : longint; rcFrame : TRect; dwEditCount : longint; dwFormatChangeCount : longint; szName : array[0..63] of char; end; PAVIStreamInfo = ^TAVIStreamInfo;function AVIFileOpen(avifile : pointer; filename : pchar; mode : integer; CLSID : pointer) : integer; stdcall; external 'avifil32.dll' index 16;function AVIFileRelease(avifile : pointer) : longint; stdcall; external 'avifil32.dll' index 20;function AVIFileGetStream(avifile : pointer; avistream : PAVIStream; streamtype : longint; lParam : longint) : integer; stdcall; external 'avifil32.dll' index 11;function AVIStreamGetFrameOpen(avistream : PAVIStream; bitmapwanted : pointer) : pointer; stdcall; external 'avifil32.dll' index 42;procedure AVIStreamGetFrameClose(pget : pointer); stdcall; external 'avifil32.dll' index 41;function AVIStreamGetFrame(getframe : pointer; position : longint) : pointer; stdcall; external 'avifil32.dll' index 40;procedure AVIStreamRelease(avistream : PAVIStream); stdcall; external 'avifil32.dll' index 53;function AVIStreamInfo(pstream : PAVIStream; psi : PAVISTREAMINFO; lsize : longint) : integer; stdcall; external 'avifil32.dll' index 44;function GetAviFrame(AviFilename : String; Index: Integer; var bmp: TBitmap): boolean;implementationfunction GetAviFrame(AviFilename : String; Index: Integer; var bmp: TBitmap): boolean;var FAviFile : Pointer; FVideoStream : Pointer; FGetFrame : Pointer; info : TAVIStreamInfo; FFrameWidth, FFrameHeight : Integer; FStartFrame, FStopFrame : Integer;// image : PBitmapInfoHeader; image : pointer; imagestart : Integer;begin result := false; if (AVIFileOpen(@favifile, pchar(AviFileName), 0, nil) <> 0) then exit; if (AVIFileGetStream(favifile, @fvideostream, streamtypeVIDEO, 0) <> 0) then begin AVIFileRelease(favifile); exit; end; AVIStreamInfo(fvideostream, @info, sizeof(info)); with info do begin fFrameWidth := rcframe.right - rcframe.left; fFrameHeight := rcframe.bottom - rcframe.top; fStartFrame := dwStart; fStopFrame := dwLength - 1; end; if (index <fstartframe) or (index > fstopframe) then begin AVIStreamRelease(fvideostream); AVIFileRelease(favifile); exit; end; fgetframe := AVIStreamGetFrameOpen(fvideostream, nil); if (fgetframe = nil) then begin AVIStreamRelease(fvideostream); AVIFileRelease(favifile); exit; end;// image := AVIStreamGetFrame(fgetframe, Index); image := AVIStreamGetFrame(fGetFrame, Index); if assigned(image) then begin if not assigned(bmp) then begin bmp := tbitmap.create; bmp.width := fframewidth; bmp.height := fframeheight; end else if bmp.empty then begin bmp.width := fframewidth; bmp.height := fframeheight; end;// imagestart := image^.biSize + image^.biClrUsed * 4; imagestart := TBitmapInfoHeader(image^).biSize + TBitmapInfoHeader(image^).biClrUsed * 4; StretchDIBits(bmp.canvas.handle, 0, 0, bmp.width, bmp.height, 0, 0, fframewidth, fframeheight, pchar(image) + imagestart, TBitmapInfo(image^), 0, SRCCOPY); result := true; end; AVIStreamGetFrameClose(fgetframe); AVIStreamRelease(fvideostream); AVIFileRelease(favifile);end;end. 还有BMP转换为AVI你可以使用AVIWriter组件,这个组件有一个bitmaps属性是一个Tlist指向一组Tbitmap对象的指针,通过write方法实现输出成Avi了。你自己下载下来使用.下面是一段代码,你参考一下:procedure TForm1.Button1Click(Sender: TObject);var bmps : array of TfileStream; bmp: TBitMap; i: Integer;begin setlength(bmps, 5); for i := 0 to 4 do begin bmp := TBitMap.Create; bmps[i] := TFileStream.Create('e:\bmp\00' + IntToStr(i) + '.bmp', fmOpenRead); end; bmp.LoadFromStream(bmps[0]); Image1.Picture.Bitmap := bmp; bmp.LoadFromStream(bmps[1]); Image2.Picture.Bitmap := bmp;end; 我这里有一个Jpg转AVI的例子,不知道楼主需不需 要 To pengxuan(追梦人),当然要了,谢了 [email protected] 能否用AVICAP32.DLLSendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar('c:\test.bmp')));//摄像头照像 楼主,Jpg转AVI的例子已发,收到请回复 十年没发帖了,来报个到,看来还挺热闹 多线程批量写入数据库 IOCP接收数据问题 Cport 串口编程 的使用方法或实例 急 急 急 自己编写的组件,事件怎么声明啊? 郁闷!小区遭雷击,液晶显示器损坏 DELPHI技巧15则(转自博士网 http://www.helpwork.net/) 我是一个初学者 请问下面代码中诸如"if ret<>""Size >"之类的是什么东西? 俺有一问题 关于进程和线程的问题,小弟不解 入库单,出库单用什么报表打印好?
uses windows, graphics;interfaceconst
streamtypeAUDIO : longint = $73647561;
streamtypeVIDEO : longint = $73646976;type
TAVIStream = record
fccType : longint;
fccHandler : longint;
dwFlags : longint;
dwCaps : longint;
wPriority : word;
wLanguage : word;
dwScale : longint;
dwRate : longint;
dwStart : longint;
dwLength : longint;
dwInitialFrames : longint;
dwSuggestedBufferSize : longint;
dwQuality : longint;
dwSampleSize : longint;
rcFrame : TRect;
dwEditCount : longint;
dwFormatChangeCount : longint;
Name : array [0..64] of char;
end; PAVIStream = ^TAVIStream; PAVIFile = pointer; TAVIFileInfo = record
dwMaxBytesPerSec : longint;
dwFlags : longint;
dwCaps : longint;
dwStreams : longint;
dwSuggestedBufferSize : longint; dwWidth : longint;
dwHeight : longint; dwScale : longint;
dwRate : longint;
dwLength : longint; dwEditCount : longint; szFileType : array[0..63] of char;
end; PAVIFileInfo = ^TAVIFileInfo; TAVIStreamInfo = record
fccType : longint;
fccHandler : longint;
dwFlags : longint;
dwCaps : longint;
wPriority : word;
wLanguage : word;
dwScale : longint;
dwRate : longint;
dwStart : longint;
dwLength : longint;
dwInitialFrames : longint;
dwSuggestedBufferSize : longint;
dwQuality : longint;
dwSampleSize : longint;
rcFrame : TRect;
dwEditCount : longint;
dwFormatChangeCount : longint;
szName : array[0..63] of char;
end; PAVIStreamInfo = ^TAVIStreamInfo;function AVIFileOpen(avifile : pointer; filename : pchar; mode : integer;
CLSID : pointer) : integer; stdcall; external 'avifil32.dll' index 16;function AVIFileRelease(avifile : pointer) : longint; stdcall; external 'avifil32.dll' index 20;function AVIFileGetStream(avifile : pointer; avistream : PAVIStream;
streamtype : longint; lParam : longint) : integer; stdcall; external 'avifil32.dll' index 11;function AVIStreamGetFrameOpen(avistream : PAVIStream; bitmapwanted : pointer) : pointer; stdcall; external 'avifil32.dll' index 42;procedure AVIStreamGetFrameClose(pget : pointer); stdcall; external 'avifil32.dll' index 41;function AVIStreamGetFrame(getframe : pointer; position : longint) : pointer; stdcall; external 'avifil32.dll' index 40;procedure AVIStreamRelease(avistream : PAVIStream); stdcall; external 'avifil32.dll' index 53;function AVIStreamInfo(pstream : PAVIStream; psi : PAVISTREAMINFO; lsize : longint) : integer; stdcall; external 'avifil32.dll' index 44;function GetAviFrame(AviFilename : String; Index: Integer; var bmp: TBitmap): boolean;implementationfunction GetAviFrame(AviFilename : String; Index: Integer; var bmp: TBitmap): boolean;
var
FAviFile : Pointer;
FVideoStream : Pointer;
FGetFrame : Pointer;
info : TAVIStreamInfo;
FFrameWidth, FFrameHeight : Integer;
FStartFrame, FStopFrame : Integer;
// image : PBitmapInfoHeader; image : pointer;
imagestart : Integer;
begin
result := false;
if (AVIFileOpen(@favifile, pchar(AviFileName), 0, nil) <> 0) then
exit; if (AVIFileGetStream(favifile, @fvideostream, streamtypeVIDEO, 0) <> 0) then
begin
AVIFileRelease(favifile);
exit;
end; AVIStreamInfo(fvideostream, @info, sizeof(info));
with info do
begin
fFrameWidth := rcframe.right - rcframe.left;
fFrameHeight := rcframe.bottom - rcframe.top;
fStartFrame := dwStart;
fStopFrame := dwLength - 1;
end; if (index <fstartframe) or (index > fstopframe) then
begin
AVIStreamRelease(fvideostream);
AVIFileRelease(favifile);
exit;
end; fgetframe := AVIStreamGetFrameOpen(fvideostream, nil);
if (fgetframe = nil) then
begin
AVIStreamRelease(fvideostream);
AVIFileRelease(favifile);
exit;
end;// image := AVIStreamGetFrame(fgetframe, Index); image := AVIStreamGetFrame(fGetFrame, Index);
if assigned(image) then
begin
if not assigned(bmp) then
begin
bmp := tbitmap.create;
bmp.width := fframewidth;
bmp.height := fframeheight;
end
else if bmp.empty then
begin
bmp.width := fframewidth;
bmp.height := fframeheight;
end;
// imagestart := image^.biSize + image^.biClrUsed * 4; imagestart := TBitmapInfoHeader(image^).biSize +
TBitmapInfoHeader(image^).biClrUsed * 4; StretchDIBits(bmp.canvas.handle, 0, 0, bmp.width, bmp.height,
0, 0, fframewidth, fframeheight,
pchar(image) + imagestart,
TBitmapInfo(image^), 0, SRCCOPY);
result := true;
end; AVIStreamGetFrameClose(fgetframe);
AVIStreamRelease(fvideostream);
AVIFileRelease(favifile);
end;end.
var
bmps : array of TfileStream;
bmp: TBitMap;
i: Integer;
begin
setlength(bmps, 5);
for i := 0 to 4 do
begin
bmp := TBitMap.Create;
bmps[i] := TFileStream.Create('e:\bmp\00' + IntToStr(i) + '.bmp', fmOpenRead);
end;
bmp.LoadFromStream(bmps[0]);
Image1.Picture.Bitmap := bmp;
bmp.LoadFromStream(bmps[1]);
Image2.Picture.Bitmap := bmp;
end;