求高效的多线程代码!谢谢 ( 积分: 100 )

  • 主题发起人 主题发起人 ydzi_
  • 开始时间 开始时间
ScanLine不慢
 
不太明白,使用ScanLine时,是否需要把SWF中的某一帧转换为BMP图像?然后才可以操作?
 
API BitBlt可以将DC的指定区域转移到一个Bitmap中,然后才可以用ScanLine的。
 
我用BitBlt试了一下,可得到的结果都是白板
ShockWaveFlash1.Movie := 'D:/123.swf';
var
bmp := tbitmap.Create;
begin
bmp := tbitmap.Create;
bmp.Width := 200;
bmp.Height := 200;

bitblt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height,
shockwaveflash1.Handle, 0, 0, SRCCOPY);
//image1.Canvas.CopyMode := cmSrcAnd;
image1.Canvas.Draw(0, 0, bmp);
bmp.Free;
end;
 
你把显示设置中的显卡硬件加速关闭再试试?
肯定好用的,仔细读读别人的代码即可。
 
bmp := tbitmap.Create;
bmp.LoadFromFile('D:/Mydo
cuments/My Pictures/1.bmp');
bitblt(image1.Canvas.Handle, 0, 0, image1.Width, image1.Height,
bmp.Canvas.Handle, 0, 0, srccopy);
bmp.Free;
这段代码工作是正常的!
奇怪,难道无法取得shockwaveflash中的图像?
 
SORRY!
问题在于 GetDC(shockwaveflash1.Handle)
 
// 这个速度的确快了很多!
bmp := Tbitmap.Create;
bmp.Width := frmFlash.ShockwaveFlash1.Width;
bmp.Height := frmFlash.ShockwaveFlash1.Height;
bmp.PixelFormat := pf32bit;
// pf8bit, pf24bit
bitblt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height,
GetDC(frmFlash.ShockWaveFlash1.Handle), 0, 0, srccopy);
for tmpY := yMin to yMax - 1do
begin
P := bmp.ScanLine[tmpY];
for tmpX := xMin to xMax - 1do
begin
// 这里不太明白,为什么取到的颜色都是255、00 没有其他颜色
// 如何把取出的颜色变成RGB的
// 谢谢
end;
WriteTxtInfo(sLineBreak);
end;
 
好利害,都是高手,顶一个
 
后退
顶部