代码之家  ›  专栏  ›  技术社区  ›  user14668421

如何在Delphi VCL中将图像从PNG转换为BMP?

  •  1
  • user14668421  · 技术社区  · 1 年前

    当我通过下面的例程将PNG图片转换为BMP图片时,BMP中的颜色与原始PNG中的颜色不同。

    procedure TForm1.Button4Click(Sender: TObject);
    var
      R: TRect;
      Bmp: TBitmap;
      Png: TPngImage;
    begin
      Png := TPngImage.Create;
      try
        Png.LoadFromFile('C:\temp\Source.png');
        bmp := TBitmap.Create(Png.Width, Png.Height);
        try
          R := Rect(0, 0, Png.Width, Png.Height);
          bmp.Canvas.CopyRect(R, png.Canvas, R);
          bmp.SaveToFile('C:\temp\target.bmp')
        finally
          Bmp.Free;
        end;
      finally
        Png.Free;
      end;
    end;
    

    你能给我一个如何解决这个问题的提示吗?

    1 回复  |  直到 1 年前
        1
  •  0
  •   Shaun Roselt    1 年前

    我刚刚测试了以下程序,它可以正常工作,没有任何问题。当比较原始PNG和结果BMP时,颜色看起来与我的人眼相同:

    procedure ConvertPNGtoBMP(const PNGFileName, BMPFileName: string);
    begin
      var PNG := TPNGObject.Create;
      var BMP := TBitmap.Create;
      try
        PNG.LoadFromFile(PNGFileName); // Load the PNG image
        BMP.Assign(PNG); // Assign the PNG image to the BMP object
        BMP.SaveToFile(BMPFileName); // Save the BMP image
      finally
        PNG.Free;
        BMP.Free;
      end;
    end;
    

    后果

    PNG to BMP Conversion results using the Delphi Programming Language

    我只是这样称呼它:

    ConvertPNGtoBMP('MyPhoto.png', 'MyPhoto.bmp');
    
    推荐文章