图像复制部分的柔化边缘(淡入)

时间:2017-06-23 14:08:18

标签: delphi delphi-7 bmp

标题可能非常不清楚,但我不知道如何以不同方式说明。

我有一个工作项目 - 将图像的一部分复制到另一部分。像这样:

enter image description here

我使用以下方法实现了这一目标:

      procedure TForm1.StampCircle;
var
  DstRect, SrcRect: TRect;
  x, y: Integer;
  MyRgn: HRGN;
begin
  x := shp_Dragger.Left;
  y := shp_Dragger.Top;

  MyRgn := CreateEllipticRGN(shp_Dragger.Left, shp_Dragger.Top, shp_Dragger.Left + shp_Dragger.Width, shp_Dragger.Top + shp_Dragger.Height);
  SelectClipRgn(Img1.Canvas.Handle, MyRgn);

  with Img1.Canvas do
  begin
    CopyMode := cmSrcCopy;
    SrcRect := Rect(Shape_Start_x, Shape_Start_y, Shape_End_x, Shape_End_y);
    DstRect := Rect(shp_Dragger.Left, shp_Dragger.Top, shp_Dragger.Left + shp_Dragger.Width, shp_Dragger.Top + shp_Dragger.Height);
    CopyRect(DstRect, Img1.Canvas, SrcRect);
  end;

  Img1.Invalidate;
  SelectClipRgn(Img1.Canvas.Handle, HRGN(nil));
  DeleteObject(MyRgn);

end;

问题在于它不是100%需要做的事情。

它需要有柔和的边缘(淡入)。 它需要看起来像enter image description here

注意首次加载图像时,图像会从JPEG转换为BMP。

procedure TForm1.LoadAndConvertToBMP(FilePath: WideString);
var
  OleGraphic: TOleGraphic;
  fs: TFileStream;
  Source: TImage;
begin
  try
    OleGraphic := TOleGraphic.Create; {The magic class!}

    fs := TFileStream.Create(FilePath, fmOpenRead or fmSharedenyNone);
    OleGraphic.LoadFromStream(fs);

    Source := Timage.Create(Nil);
    Source.Picture.Assign(OleGraphic);

    bmp := TBitmap.Create; {Converting to Bitmap}
    bmp.Width := Source.Picture.Width;
    bmp.Height := source.Picture.Height;
    bmp.Canvas.Draw(0, 0, source.Picture.Graphic);

    img1.Picture.Bitmap := BMP; {Show the bitmap on form}
  finally
    fs.Free;
    OleGraphic.Free;
    Source.Free;
  end;
end;

我在网上看到了很多想法,我尝试了很多不同的方法,但没有一种方法有效。

我真的很感激任何帮助或方向,即在哪里寻找或尝试什么。

谢谢

0 个答案:

没有答案