使用以下方法,透明毛刺问题很严重,有什么方法可以改正,或是其它更好的方法procedure TForm1.FormCreate(Sender: TObject);
begin    DoubleBuffered := True;   // 设置跟 shckwvflash 控件宽高和xy 一致
    bmpBuf := TBitmap.Create;
    bmpBuf.PixelFormat := pf24bit;
    bmpBuf.Transparent := False;
    bmpBuf.Width := shckwvflsh1.Width;
    bmpBuf.Height := shckwvflsh1.Height;
    img1.Width := shckwvflsh1.Width;
    img1.Height := shckwvflsh1.Height;
    img1.Top := shckwvflsh1.Top;
    img1.Left := shckwvflsh1.Left;
    img1.Transparent := True;
    shckwvflsh1.Visible := False;
  //  shckwvflsh1.Movie := 'c:\1.swf';
                 shckwvflsh1.Movie:='C:\Documents and Settings\Administrator\桌面\瑜伽2\Flash\yoga\1.swf';
end;procedure TForm1.FormResize(Sender: TObject);
begin
    Repaint;
end;procedure TForm1.FormPaint(Sender: TObject);
begin
  bmpFormBg := TBitmap.Create;
  bmpFormBg.LoadFromFile('C:\Documents and Settings\Administrator\桌面\素材\Main.bmp');
  Canvas.StretchDraw(ClientRect, bmpFormBg);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
 bmpBuf.Free;
 bmpFormBg.Free;
end;procedure TForm1.tmr1Timer(Sender: TObject);
begin
  shckwvflsh1.PaintTo(bmpBuf.Canvas, 0, 0);
  bmpBuf.Canvas.Brush.Style := bsClear;
  bmpBuf.Transparent := True;
  img1.Picture.Bitmap.Assign(bmpBuf);
end;透明毛刺问题

解决方案 »

  1.   


    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DoubleBuffered := True;  bmpBuf := TBitmap.Create;
      bmpBuf.PixelFormat := pf24bit;
      bmpBuf.Transparent := False;
      bmpBuf.Width := shckwvflsh1.Width;
      bmpBuf.Height := shckwvflsh1.Height;  img1.Width := shckwvflsh1.Width;
      img1.Height := shckwvflsh1.Height;
      img1.Top := shckwvflsh1.Top;
      img1.Left := shckwvflsh1.Left;
      img1.Transparent := True;
      shckwvflsh1.Quality := 0; // 设置低质量可以消除毛边,但是flash画质下降
      shckwvflsh1.Visible := False;
      shckwvflsh1.Movie := ExtractFilePath(Application.ExeName) + '1.swf';
    end;明天有空再研究研究
      

  2.   

    bmpBuf.PixelFormat := pf24bit; 
    值设为pf15bit,基本可以忽略毛刺的问题.这个可能取决你的Flash来设置了.我也是一个一个试过来的
      

  3.   

    闪屏的问题.其实还是蛮严重的.  DoubleBuffered:=True; 加了这样一句传呼没用.一个问题,接一个问题的来,还好不是赶项目,这要不然...game over 了!
      

  4.   

    你改了pf15bit,bmp图像颜色要失真,而且毛边一样照旧,回头找找GDI+的方法试试。
    另外我这边一点都不闪。
      

  5.   

    http://bbs.csdn.net/topics/390457348
    新问题,如何判断在ShockwaveFlash控件上字母A一直是按下状态.
    pf15bit 我这里刚刚好,16bit都有比较明显,24bit就很大.
    这贴我结了,solelie哥接分
      

  6.   

    给你一个思路,从swf文件着手
    首先建立一个swf文件,容器.swf
    并写一个接口和外部程序通讯,
    通过接口,外部程序可以加载swf能识别的文件到画面上显示(包括图像,声音,swf影片...好多好多).
    虽然可以直接把外部swf引入容器中一起编译,不过我想你肯定要动态变换外部swf,所以用这个方法.Delphi中,首先装入 容器.swf,然后通过接口,装入背景,然后装入你那个swf不就行了,透明,渐变,图像填充,画质....一切问题全部搞定,不是最好不过了?事件也可以通过接口转到Delphi中.....如需要,可以纸条发过来
      

  7.   


    LS蓝大佬要给你搞了,快去PM,测试解决问题后share上来
    我刚刚也下载了dswfsdk.exe,准备看看里面的demo呢,发现居然乜有DEMO、碎嚼,碎嚼
      

  8.   

    把它改回pf24bit,给 shckwvflsh1.BackgroundColor 属性给个0~255的值,但别给0就行了
    http://shckwvflsh1.BackgroundColor
      

  9.   

    贴错地址
    http://bbs.csdn.net/topics/390455730?page=1#post-394481047