Я подозреваю, что это вызвано 2 вещами: смешные значения RGBA в PNG и наивный код изменения размера.
Вам необходимо проверить содержимое PNG. Вы ищете значения RGB в прозрачных областях. Несмотря на прозрачные области, имеющие Alpha в 0, они все еще имеют информацию RGB. В вашем случае я ожидаю, что прозрачные области заполнены черным значением RGB. Это то, что может вызвать серый контур после изменения размера, если изменение размера выполняется наивно. Пример: что произойдет, если код изменяет размер 2 настраиваемых пикселей (0,0,0,0) и (255,255,255,255) в один? Оба пикселя вносят вклад на 50%. В результате получается 128, 128, 128, 128), который является полупрозрачным серым. То же самое происходит, когда вы масштабируете, например, x1.5, добавленный пиксель между оригинальными двумя будет серым. Обычно этого не происходит, потому что программное обеспечение для редактирования изображений достаточно умен, чтобы заполнить эти невидимые пиксели цветом с ближайшего видимого пикселя.
Вы можете попробовать «исправить» PNG, заполнив прозрачные области белым (или другим цветом, который находится на границе ваших изображений).
Другой подход: используйте расширенный код для изменения размера (напишите или найдите в библиотеке), который будет игнорировать значения RGB прозрачных пикселей (например, взяв RGB из ближайшего непрозрачного пикселя).
Возможно [эта информация] (http://stackoverflow.com/a/2439466/62576) может помочь. –
Фактически, я использую решение в первом ответе (ответ Райана). К сожалению, я не могу использовать внешние библиотеки (ограничение на развертывание), как и другие ответы (хотя я бы получил лучшие результаты с ними). Третий ответ заключался только в том, чтобы растянуть изображения, но мы все знаем, какие проблемы растягиваются. Библиотека Graphics32, похоже, не работает с Delphi 5 (использует функции от D6). – beerwin