当前位置: 首页 > 知识库问答 >
问题:

如何从位图创建透明的png图像?

宇文鸿畴
2023-03-14

我的任务是:

  1. 创建一个TBitmap对象

如何在Delphi XE中做到这一点?

var
  Png: TPngImage;
  X, Y: Integer;
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap.Create();
  Bitmap.PixelFormat := pf32bit;
  Png := TPngImage.Create();
  try
    Bitmap.SetSize(100, 100);

    // How to clear background in transparent color correctly?
    // I tried to use this, but the image in PNG file has solid white background:
    for Y := 0 to Bitmap.Height - 1 do
      for X := 0 to Bitmap.Width - 1 do
        Bitmap.Canvas.Pixels[X, Y]:= $00FFFFFF;

    // Now drawing something on a Bitmap.Canvas...
    Bitmap.Canvas.Pen.Color := clRed;
    Bitmap.Canvas.Rectangle(20, 20, 60, 60);

    // Is this correct?
    Png.Assign(Bitmap);
    Png.SaveToFile('image.png');
  finally
    Png.Free();
    Bitmap.Free();
  end;
end;

共有1个答案

郎聪
2023-03-14

或多或少是多林答案的副本。它展示了如何制作透明的png图像以及如何清除背景。

uses
  PngImage;
...

var
  bmp: TBitmap;
  png: TPngImage;
begin
  bmp := TBitmap.Create;
  bmp.SetSize(200,200);

  bmp.Canvas.Brush.Color := clBlack;
  bmp.Canvas.Rectangle( 20, 20, 160, 160 );

  bmp.Canvas.Brush.Style := bsClear;
  bmp.Canvas.Rectangle(1, 1, 199, 199);

  bmp.Canvas.Brush.Color := clWhite;
  bmp.Canvas.Pen.Color := clRed;
  bmp.Canvas.TextOut( 35, 20, 'Hello transparent world');

  bmp.TransparentColor := clWhite;
  bmp.Transparent := True;

  png := TPngImage.Create;
  png.Assign( bmp );
  png.SaveToFile( 'C:\test.png' );

  bmp.Free;
  png.Free;
end;
 类似资料:
  • 问题内容: 我正在尝试创建透明的png图像,并对其他各种png和jpg进行分层,以创建具有透明度的最终png。我在创建初始的空透明png时遇到问题。目前有白色背景。 谁能指出我正确的方向。到目前为止,这是我的代码… 问题答案: 在每个新图层上设置。 尝试这个:

  • 我将png文件加载到TPNGImage中,然后将其显示在TImage中。没问题。然后我创建一个TBitmap并将其分配给TPNGImage,并将其显示在TImage中。没问题。 然后我创建第二个TPNGImage并将其分配给TBitmap。在这种情况下,如果我在TImage中显示它,它就失去了透明度。如果我设置了TBitmap。透明到True,在指定给PNGImage之前,PNGImage基本上是

  • 问题内容: 我看过一些代码源,但是我不明白… 我使用Java 7 请, 如何将RGB (红色,绿色,蓝色) 字节数组 (或类似 格式 ) 转换为.PNG文件格式 ? 可能表示“ RGB像素”的数组中的示例: 重要方面: 我尝试仅从byte []“ 而不是 从以前的现有文件” 生成.PNG文件 现有的API有可能吗?;) 这是我的第一个代码: .... 错误: 找不到合适的方法 这里是 Jeremy

  • 我试图拖动对象表示为PNG图像透明背景从AnchorPane到HBox。 我使用以下线条将图像设置为拖动视图: 对于不透明的背景图像,这一切都很好,但对于透明的图像,图像的背景是白色的,不透明度为“0.8”。 我尝试为节点拍摄快照: 但它不起作用,白色背景仍然存在。有没有其他方法可以让它像原始图像一样透明?

  • 问题内容: 我有一个位图: 但我不会将图像显示给用户。我希望Alpha为100(总共255)。如果这不可能,我可以设置透明度吗? 问题答案: 您也可以尝试使用BitmapDrawable代替。如果这对您有用,则取决于您使用位图的方式… 编辑 正如评论者所问的那样,他如何使用alpha存储位图,下面是一些代码:

  • 透明像素由零的alpha值和任意的红色、绿色和蓝色值组成。因此,即使一个像素是透明的,它仍然有一种颜色。 我现在想创建一个完全透明的位图,但有一个特定的颜色(例如白色)。但我尝试的每一种方法都会得到一个黑色的透明位图(就像png文件中的一样)。 这对我来说非常重要,因为我通过画布在位图上呈现抗锯齿文本。在角落上,半透明像素变得更暗。我想做的是事先用与文本相同的颜色填充位图或画布,但透明。 我的密码