200分只给一个人,是Delphi流操作比较慢吗?为何通过流然后绘制到Image上闪动比较厉害。求老大帮忙!!!!!!!!!

OO_is_just_P 2006-07-27 10:19:19
CANON数码相机SDK回调函数,此处也可以通过参数将流格式化成jpg格式:
function ViewFinder_CallbackFunction(pBuf:pointer;Size:cdUInt32;Format:cdUInt32;Context : cdContext) : cdUInt32 stdcall;
begin
BmpStream.Clear;
BmpStream.WriteBuffer(pBuf^,Size);
BmpStream.Position :=0;
//BmpStream.SaveToFile('c:\a.Bmp');
Result :=cdOK;
end;


通过定时器绘制图像,定时器的Interval设置成多少都闪动的厉害:
procedure TfrmMain.ViewFinderTimerTimer(Sender: TObject);
begin
Image1.Picture.BitMap.LoadFromStream(BmpStream);
end;
...全文
336 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvyongheng 2007-02-09
  • 打赏
  • 举报
回复
請問楼主:err = CDStartViewfinder(m_hSource,FILEFORMAT_BMP,ViewFinderCallBackFun,(cdContext)this );
这是VC++的示例程序原码,为什么ViewFinderCallBackFun回调函数不能被调用?ViewFinderCallBackFun就是不启动.
OO_is_just_P 2006-07-27
  • 打赏
  • 举报
回复
谢谢SonicX(SonicX)和ffwin()
每个人100分吧。
wudi_1982 2006-07-27
  • 打赏
  • 举报
回复
关于你的问题,使用缓冲来解决是比较好的办法。。。
befree 2006-07-27
  • 打赏
  • 举报
回复
开个玩笑,delphi不比vb慢的
可能你调用的问题
befree 2006-07-27
  • 打赏
  • 举报
回复
MASM写的同样代码,只是没有通过流操作,直接读取Buffer,然后通过定时器绘制图形,就基本没有闪动。
GARNETT2183 2006-07-27
  • 打赏
  • 举报
回复
使用缓冲来解决吧...
wudi_1982 2006-07-27
  • 打赏
  • 举报
回复
foxyy8888 (古来圣贤皆寂寞,惟有饮者留其名!)

抽空喝上两杯!
ffwin 2006-07-27
  • 打赏
  • 举报
回复
原理就是 双缓冲
先写到一个图上,然后再赋给要显示的图;

procedure TfrmMain.ViewFinderTimerTimer(Sender: TObject);
var
Bitmap: TBitMap;
begin
Bitmap := TBitMap.Create;
Bitmap.LoadFromStream(BmpStream);
// Image1.Picture.BitMap.LoadFromStream(BmpStream);
Image1.Picture.BitMap.Canvas.Draw(0, 0, Bitmap);
Bitmap.Free;
end;
SonicX 2006-07-27
  • 打赏
  • 举报
回复
记得有人重写了TIMAGE单元解决这个问题,原理就是开启双缓冲
另外的办法用的是TPaintBox
代码
var
B:TBitmap;
begin
B:=TBitmap.Create;
B.LoadFromStream(BmpStream);
PaintBox1.Canvas.CopyRect(PaintBox1.Canvas.ClipRect,B.Canvas,B.Canvas.ClipRect);
B.Free;
end;
OO_is_just_P 2006-07-27
  • 打赏
  • 举报
回复
VC写的同样代码,只是没有通过流操作,直接读取Buffer,然后通过定时器绘制图形,就基本没有闪动。
OO_is_just_P 2006-07-27
  • 打赏
  • 举报
回复
我用VB写的同样代码,只是没有通过流操作,直接读取Buffer,然后通过定时器绘制图形,就基本没有闪动。
superyys 2006-07-27
  • 打赏
  • 举报
回复
TImage有个IncrementalDisplay属性,试一下嘛
superyys 2006-07-27
  • 打赏
  • 举报
回复
好多分哦@

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧