Пользователи Delphi 7 столкнулись с проблемой, когда размеры иконок в формате .ico отображались некорректно, а именно всегда как 32x32, независимо от их реального размера. Это происходило из-за того, что компоненты TImage и TPicture некорректно определяли ширину и высоту загруженных иконок. В результате, даже если иконка имела размеры 16x16, 64x64 или 128x128 пикселей, в программе они отображались как 32x32.
Пример кода загрузки изображений
procedure TfrmImageLoader.btnBrowseClick(Sender: TObject);
var
openPictureDlg: TOpenPictureDialog;
jpgImage: TJPEGImage;
testWidth, testHeight: Integer;
begin
// Код загрузки изображения...
end;
В этом коде видно, что для всех типов файлов, кроме .ico, размеры отображались корректно. Это было связано с особенностями внутренней реализации компонентов и форматов файлов.
Решение проблемы
Для корректного отображения размеров иконок было предложено два метода:
Загрузить иконку, присвоить её TBitmap и прочитать размеры из TBitmap.
Прочитать заголовок файла иконки, где в байтах 7 и 8 хранится информация о ширине и высоте.
Второй метод оказался примерно в 20 раз быстрее в тестах и был реализован в следующей функции:
procedure GetTrueIconSize2(const cszIcon: String; var trueW: Integer; var trueH: Integer);
var
fs: TFileStream;
firstBytes: AnsiString;
begin
// Код чтения размера иконки из заголовка файла
end;
Обратите внимание, что значение 0 в байтах 7 и 8 заголовка файла иконки означает максимально поддерживаемый размер иконки, который равен 256x256.
Альтернативный ответ
Также было предложено самостоятельно обработать файлы .ico, что является довольно простым процессом, учитывая структуру формата ICO. В простейшем случае, когда в файле только одна картинка, первые 6 байт файла должны быть 00 00 01 00 01 00, а байты 7 и 8 содержат ширину и высоту иконки.
Заключение
Проблема с отображением размеров иконок в Delphi 7 была связана с особенностями работы компонентов TImage и TPicture. Для её решения были предложены методы, которые позволяют корректно определить размеры иконок, что необходимо для их правильного отображения в приложении.
Пользователи Delphi 7 столкнулись с ошибкой отображения размеров иконок, из-за чего реальные размеры иконок в формате `.ico` не корректно отображались в программе, в частности, всегда как 32x32 пикселей, что требовало корректировки в коде для их правильн
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.