如何将FMX.Graphics.TBitmap转换为VCL.Graphics.TBitmap或Vcl.Imaging.PngImage.TPngImage?

洛斯曼

如何将FMX.Graphics.TBitmap转换为VCL.Graphics.TBitmap或Vcl.Imaging.PngImage.TPngImage?

我的项目中同时包含FMX表单和VCL表单。

洛斯曼

多亏了大卫·赫弗南David Heffernan)和一些搜索,我将这些函数编写如下。

我首先想出了不支持Alpha的功能

function ConvertFmxBitmapToVclBitmap(b:FMX.Graphics.TBitmap):Vcl.Graphics.TBitmap;
var
  data:FMX.Graphics.TBitmapData;
  i,j:Integer;
  AlphaColor:TAlphaColor;
begin
  Result:=VCL.Graphics.TBitmap.Create;
  Result.SetSize(b.Width,b.Height);
  if(b.Map(TMapAccess.Readwrite,data))then
  try
    for i := 0 to data.Height-1 do begin
      for j := 0 to data.Width-1 do begin
        AlphaColor:=data.GetPixel(i,j);
        Result.Canvas.Pixels[i,j]:=
          RGB(
            TAlphaColorRec(AlphaColor).R,
            TAlphaColorRec(AlphaColor).G,
            TAlphaColorRec(AlphaColor).B);
      end;
    end;
  finally
    b.Unmap(data);
  end;
end;

我编写了第二个函数,将FMX.Graphics.TBitmap转换Vcl.Imaging.PngImage.TPngImage,它支持Alpha。

function ConvertFmxBitmapToPng(b:FMX.Graphics.TBitmap):Vcl.Imaging.PngImage.TPngImage;
var
  data:FMX.Graphics.TBitmapData;
  i,j:Integer;
  AlphaColor:TAlphaColor;
  AlphaLine:VCL.Imaging.PngImage.pByteArray;
begin
  result:=TPngImage.CreateBlank(COLOR_RGBALPHA, 8, b.Width, b.Height);;
  if(b.Map(TMapAccess.Readwrite,data))then
  try
    for i := 0 to data.Height-1 do begin
      AlphaLine:=Result.AlphaScanline[i];
      for j := 0 to data.Width-1 do begin
        AlphaColor:=data.GetPixel(j,i);
        AlphaLine^[j]:=TAlphaColorRec(AlphaColor).A;
        Result.Pixels[j,i]:=
          RGB(
            TAlphaColorRec(AlphaColor).R,
            TAlphaColorRec(AlphaColor).G,
            TAlphaColorRec(AlphaColor).B);
      end;
    end;
  finally
    b.Unmap(data);
  end;
end;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

线程可以安全创建FMX.Graphics.TBitmap.Canvas吗?

来自分类Dev

Delphi中Graphics.TBitmap的PixelFormat的默认值

来自分类Dev

如何将Graphics2D转换为BufferedImage?

来自分类Dev

如何从VCL.Graphics ...中获取所有已注册文件格式...但64位

来自分类Dev

如何从VCL.Graphics ...中获取所有已注册文件格式...但64位

来自分类Dev

将Graphics对象转换为Bitmap

来自分类Dev

如何将Android.Resource.Color转换为Android.Graphics.Color

来自分类Dev

如何将Android.Graphics的GetPixel给定的Int转换为Color?

来自分类Dev

如何将SkiaSharp.SkBitmap转换为Android.Graphics.Bitmap?

来自分类Dev

如何将Android.Graphics的GetPixel给定的Int转换为Color?

来自分类Dev

如何将LiveBinding转换器从TBlob转换为TBitmap

来自分类Dev

将Graphics2D转换为ImageIcon

来自分类Dev

将Graphics2D转换为BufferedImage

来自分类Dev

如何将Datasnap服务器从VCL应用程序转换为Windows服务

来自分类Dev

将android.graphics.Bitmap转换为java.io.File

来自分类Dev

Java:无法通过graphics.drawString(...)将Unicode正确转换为文本

来自分类Dev

Java:无法通过graphics.drawString(...)将Unicode正确转换为文本

来自分类Dev

将android.graphics.Bitmap转换为java.io.File

来自分类Dev

android.graphics.drawable.NinePatchDrawable无法转换为android.graphics.drawable.TransitionDrawable”

来自分类Dev

Graphics的IndexOutOfBoundsException

来自分类Dev

无法从int转换为Android.Graphics.Color

来自分类Dev

Graphics.drawImage将BufferedImage留空

来自分类Dev

将ScaleTransform应用于Graphics GDI +

来自分类Dev

将double传递给Graphics fillRect方法

来自分类Dev

如何配置Intel HD Graphics 4000?

来自分类Dev

iOS Core Graphics如何删除图形

来自分类Dev

Turtle Graphics:如何向上移动标签?

来自分类Dev

如何配置Intel HD Graphics 4000?

来自分类Dev

如何淡化graphics.fill调用

Related 相关文章

  1. 1

    线程可以安全创建FMX.Graphics.TBitmap.Canvas吗?

  2. 2

    Delphi中Graphics.TBitmap的PixelFormat的默认值

  3. 3

    如何将Graphics2D转换为BufferedImage?

  4. 4

    如何从VCL.Graphics ...中获取所有已注册文件格式...但64位

  5. 5

    如何从VCL.Graphics ...中获取所有已注册文件格式...但64位

  6. 6

    将Graphics对象转换为Bitmap

  7. 7

    如何将Android.Resource.Color转换为Android.Graphics.Color

  8. 8

    如何将Android.Graphics的GetPixel给定的Int转换为Color?

  9. 9

    如何将SkiaSharp.SkBitmap转换为Android.Graphics.Bitmap?

  10. 10

    如何将Android.Graphics的GetPixel给定的Int转换为Color?

  11. 11

    如何将LiveBinding转换器从TBlob转换为TBitmap

  12. 12

    将Graphics2D转换为ImageIcon

  13. 13

    将Graphics2D转换为BufferedImage

  14. 14

    如何将Datasnap服务器从VCL应用程序转换为Windows服务

  15. 15

    将android.graphics.Bitmap转换为java.io.File

  16. 16

    Java:无法通过graphics.drawString(...)将Unicode正确转换为文本

  17. 17

    Java:无法通过graphics.drawString(...)将Unicode正确转换为文本

  18. 18

    将android.graphics.Bitmap转换为java.io.File

  19. 19

    android.graphics.drawable.NinePatchDrawable无法转换为android.graphics.drawable.TransitionDrawable”

  20. 20

    Graphics的IndexOutOfBoundsException

  21. 21

    无法从int转换为Android.Graphics.Color

  22. 22

    Graphics.drawImage将BufferedImage留空

  23. 23

    将ScaleTransform应用于Graphics GDI +

  24. 24

    将double传递给Graphics fillRect方法

  25. 25

    如何配置Intel HD Graphics 4000?

  26. 26

    iOS Core Graphics如何删除图形

  27. 27

    Turtle Graphics:如何向上移动标签?

  28. 28

    如何配置Intel HD Graphics 4000?

  29. 29

    如何淡化graphics.fill调用

热门标签

归档