用AVIWRITR控件做屏幕录像怎么解决虚拟内存不够用???和透明窗体问题.. ( 积分: 200 )

  • 主题发起人 主题发起人 dxf770
  • 开始时间 开始时间
D

dxf770

Unregistered / Unconfirmed
GUEST, unregistred user!
1.我用AVIWRITE把一些BMP图像转成AVI时占内存太多了..1G多都不够用...主要是因为
aviwriter.AddFrame(bmp);内存就会越来越大...而且只能在结束后才 aviwriter.writeavi;这样录像时间就会很短...用什么办法解决啊???我也试过DSPACK但只能把最后生成的AVI压缩..

2.我想做一个方框..中间是透明的..可以用MOUSE拖动改变位置和大小...有什么好的办法?
 
1.我用AVIWRITE把一些BMP图像转成AVI时占内存太多了..1G多都不够用...主要是因为
aviwriter.AddFrame(bmp);内存就会越来越大...而且只能在结束后才 aviwriter.writeavi;这样录像时间就会很短...用什么办法解决啊???我也试过DSPACK但只能把最后生成的AVI压缩..

2.我想做一个方框..中间是透明的..可以用MOUSE拖动改变位置和大小...有什么好的办法?
 
1。不要一次性合成,合成个几十M的时候就写一个文件,然后再合并,AVI的合并好像不是太难的
2。用窗体
代码如下:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;
type
TForm1 = class(TForm)
private
procedure WmNCHitTest(var Msg : TWMNCHitTest);
message WM_NCHITTEST;
{ Private declarations }
public
{ Public declarations }
end;

var

Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WmNCHitTest(var Msg: TWMNCHitTest);
const v=10;
//border width
var p:TPoint;
begin

p:=Point(Msg.XPos,Msg.YPos);
p:=ScreenToClient(p);
if PtInRect(Rect(0,0,v,v),p) then

Msg.Result:=HTTOPLEFT
else
if PtInRect(Rect(Width-v,Height-v,Width,Height),p) then

Msg.Result:=HTBOTTOMRIGHT
else
if PtInRect(Rect(Width-v,0,Width,v),p) then

Msg.Result:=HTTOPRIGHT
else
if PtInRect(Rect(0,Height-v,v,Height),p) then

Msg.Result:=HTBOTTOMLEFT
else
if PtInRect(Rect(v,0,Width-v,v),p) then

Msg.Result:=HTTOP
else
if PtInRect(Rect(0,v,v,Height-v),p) then

Msg.Result:=HTLEFT
else
if PtInRect(Rect(Width-v,v,Width,Height-v),p) then

Msg.Result:=HTRIGHT
else
if PtInRect(Rect(v,Height-v,Width-v,Height),p) then

Msg.Result:=HTBOTTOM;
Inherited;
end;

end.


透明在2000下很简单,在98下我不知道怎么做 2000下设
AlphaBlend:=true
AlphaBlendValue:=150
 
avi的合并怎么做??
 
可能是你的处理方法有问题!我用摄像头录像并保存成jpg图片文件,用AVIWRITE生成AVI文件,处理将近3000副图片都没有问题。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
614
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
634
import
I
后退
顶部