Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблема с некорректным отображением PNG в TPngImage после обновления до Delphi 12.3

Delphi , Графика и Игры , Bitmap

 

В последней версии Delphi 12.3 пользователи столкнулись с проблемой некорректного отображения PNG-изображений при использовании класса TPngImage. В частности, изображения с 1-битной глубиной цвета (1 бит на пиксель) отображаются неправильно, что приводит к визуальным артефактам или даже полному отсутствию изображения.

Описание проблемы

Проблема проявляется в следующих сценариях:
- Загрузка PNG-изображения в TImage через свойство Picture.
- Отображение PNG в FastReport (например, при печати отчётов).
- Использование TPngImage для обработки изображений в коде.

Пример кода, который может вызвать проблему:

var
  PngImage: TPngImage;
begin
  PngImage := TPngImage.Create;
  try
    PngImage.LoadFromFile('image_1bit.png'); // 1-битное изображение
    Image1.Picture.Assign(PngImage);         // Некорректное отображение
  finally
    PngImage.Free;
  end;
end;

Причина

Ошибка связана с обработкой 1-битных PNG-изображений в TPngImage в Delphi 12.3. Внутренний механизм декодирования таких изображений работает некорректно, что приводит к искажению или отсутствию отображения.

Решение 1: Конвертация в более высокую глубину цвета

Простейший способ обойти проблему — пересохранить изображение с большей глубиной цвета (например, 24 или 32 бита). Это можно сделать в графическом редакторе (например, в Paint) или программно:

procedure Convert1BitTo24Bit(const InputFile, OutputFile: string);
var
  PngImage: TPngImage;
  Bitmap: TBitmap;
begin
  PngImage := TPngImage.Create;
  Bitmap := TBitmap.Create;
  try
    PngImage.LoadFromFile(InputFile);
    Bitmap.Assign(PngImage); // Автоматическая конвертация в 24-битный формат
    PngImage.Assign(Bitmap);
    PngImage.SaveToFile(OutputFile);
  finally
    PngImage.Free;
    Bitmap.Free;
  end;
end;

Решение 2: Использование альтернативных библиотек

Если TPngImage не подходит, можно воспользоваться сторонними библиотеками, такими как:
- VCL.Imaging.pngimage (из состава Delphi)
- Graphics32 (расширенная библиотека для работы с графикой)
- FreeImage (внешняя библиотека для обработки изображений)

Пример с VCL.Imaging.pngimage:

uses
  Vcl.Imaging.pngimage;

var
  PngImage: TPngImage;
begin
  PngImage := TPngImage.Create;
  try
    PngImage.LoadFromFile('image_1bit.png');
    Image1.Picture.Assign(PngImage); // Корректное отображение
  finally
    PngImage.Free;
  end;
end;

Решение 3: Временный обходной путь в FastReport

Если проблема возникает при печати отчётов, можно конвертировать изображение в JPEG перед сохранением в БД:

procedure SaveAsJPEG(const PngImage: TPngImage; const OutputFile: string);
var
  JPEGImage: TJPEGImage;
begin
  JPEGImage := TJPEGImage.Create;
  try
    JPEGImage.Assign(PngImage);
    JPEGImage.SaveToFile(OutputFile);
  finally
    JPEGImage.Free;
  end;
end;

Заключение

Проблема с 1-битными PNG в TPngImage в Delphi 12.3 требует временных решений, пока Embarcadero не выпустит официальный патч. Рекомендуется:
1. Избегать 1-битных PNG в проектах.
2. Использовать конвертацию в 24/32-битный формат.
3. Рассмотреть альтернативные библиотеки для работы с PNG.

Если вы столкнулись с этой проблемой, следите за обновлениями на официальном трекере Embarcardero.

Обновление: На момент написания статьи проблема подтверждена и находится в статусе "Open". Пользователи могут временно применять описанные выше решения.

Создано по материалам из источника по ссылке.

Проблема некорректного отображения 1-битных PNG-изображений в `TPngImage` после обновления до Delphi 12.3.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Bitmap ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-26 09:08:39/0.0060219764709473/0