Как я могу установить изображение, чтобы иметь прозрачный фон в C # без использования Bitmap.MakeTransparent ()? - PullRequest
4 голосов
/ 10 декабря 2011

Я хочу установить для изображения прозрачный фон, но я не хочу заменять все пиксели определенного цвета прозрачностью.

Чтобы быть более точным, изображение является уменьшенным изображением дляпапка, полученная через IShellItemImageFactory.GetImage.Это дает мне растровое изображение, как показано в миниатюре проводника Windows, но фон является сплошным белым.

Я могу использовать Bitmap.MakeTransparent на нем, и это будет работать в большинстве случаев, но в любых случаях, когдаминиатюра изображения содержит сам белый (например, папку, содержащую изображения, включающие белые цвета).

Кстати, впервые за более чем 10 лет, когда разработчик, после поиска своего вопроса в Google, у меня естья нигде не нашел ответа, и мне самому пришлось его спросить.(Я думаю, это означает, что я только что выровнялся! Йиппи, я теперь разработчик 2-го уровня ...)

Ответы [ 2 ]

1 голос
/ 11 декабря 2011

Итак, что вы получаете от IShellItemImageFactory.GetImage - это составное изображение, которое содержит исходное изображение на белом фоне? Я подозреваю, что белый фон есть, если изображение не имеет такое же соотношение сторон, как размер эскиза. Например, если вы запросите миниатюру размером 96x96 для изображения 640x480, то сверху и снизу будет некоторое свободное пространство.

Если это так, у вас есть проблема. Вы не можете различить белые пиксели, которые содержатся в изображении, и белые пиксели, которые добавляются с помощью GetImage.

Есть несколько вещей, которые вы могли бы сделать. Вы можете загрузить изображение и изменить его размер самостоятельно. Это, наверное, самый простой. Тогда вы захотите сохранить свой собственный кэш миниатюр.

Или вы можете просмотреть изображение, возвращаемое GetImage, чтобы найти пустое пространство по бокам. По сути, если каждый пиксель в строке (или столбце) белый, то сделайте эту строку (или столбец) прозрачной. Это немного сложнее (например, логотип NBA ). Но это по сути то, что вы хотели бы сделать.

1 голос
/ 11 декабря 2011

Используйте алгоритм заливки, чтобы залить пиксели того же цвета снаружи, как вам нужно. Это нечто похожее на волшебную палочку в фотошопе.

http://en.wikipedia.org/wiki/Flood_fill

Я бы сделал заливку неясным цветом (Magenta всегда делает это для меня), а затем заменил этот цвет прозрачным (я не знаю, возможно ли заливка прозрачными пикселями).

...