У меня есть небольшая проблема … я разрабатываю SkinEngine, который позволяет Delphi Vcl приложения быть обработаны. для этой цели я разработал новый формат файла (mSkin) для размещения данных скина. поэтому мой файл скина содержит 2 заголовка, первый содержит некоторую информацию о цветах, используемых скином, второй содержит растровое изображение, используемое skin (тип растрового изображения — битовый образ альфа-канала для поддержки прозрачности). В моем элементе управления я использую функцию для извлечения растрового изображения объекта из растрового изображения (mSkin.Bitmap) и отрисовки этого растрового изображения на моем элементе управления. проблема в том, что когда растровое изображение не сформировано, при масштабировании исходного растрового изображения получилось плохое качество. Размер растрового изображения объекта пропорционален размеру элемента управления (когда изменился размер элемента управления ==> также изменилось изображение растрового изображения).
Я пытался прочитать стиль Vcl, чтобы решить эту проблему … но это, кажется, очень трудно читать.
Есть ли способ скопировать растровое изображение и сохранить качество?
Если вы используете растровые изображения, вы просто не сможете масштабировать без проблем, которые у вас есть. Если вы хотите масштабировать, где, например, граница в один пиксель остается границей в один пиксель, тогда вы должны использовать векторный формат для ваших изображений.
Вам нужно разделить это на 9 различных растровых изображений, например, сетку 3х3. тогда вы только масштабируете середину, остальные остаются того же размера, но двигаются. Эта ссылка это для Android, но применяются те же принципы.
Вот другая ссылка. Это для вспышки, но это также объясняет принцип.
Попробуйте использовать алгоритм передискретизации.
Для апскейлинга мне очень нравится B-Spline.
Для простого контента, как у вас, семья hqnx иногда дает хорошие результаты и очень быстро рендерится (даже в режиме реального времени). Для некоторого исходного кода паскаля, вы можете взглянуть на эту ветку форума.
Смотрите также это более общий вопрос.