В последней версии 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) или программно:
Если 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 перед сохранением в БД:
Проблема с 1-битными PNG в TPngImage в Delphi 12.3 требует временных решений, пока Embarcadero не выпустит официальный патч. Рекомендуется:
1. Избегать 1-битных PNG в проектах.
2. Использовать конвертацию в 24/32-битный формат.
3. Рассмотреть альтернативные библиотеки для работы с PNG.
Обновление: На момент написания статьи проблема подтверждена и находится в статусе "Open". Пользователи могут временно применять описанные выше решения.
Проблема некорректного отображения 1-битных PNG-изображений в `TPngImage` после обновления до Delphi 12.3.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.