Когда я конвертирую изображение 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;
Не могли бы вы подсказать мне, как решить эту проблему, пожалуйста?
Я только что протестировал следующую процедуру, и она работает без каких-либо проблем. Цвета выглядят идентично моим человеческим глазам при сравнении исходного 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;
Полученные результаты:
Я просто назвал это так:
ConvertPNGtoBMP('MyPhoto.png', 'MyPhoto.bmp');
Привет, ваш код работает, спасибо
Вероятно, это связано с тем, что вы не определили растровые изображения
PixelFormat
илиPalette
перед рисованием PNG на растровом изображении. Если выAssign()
TPNGImage
наTBitmap
, растровое изображениеPixelFormat
будет установлено в соответствии с битовой глубиной пикселей PNG, и если у PNG определена цветовая палитра, то она будет скопирована вTBitmap
.