Im пытается создать маленький квадрат 32 на 32 пикселя с прозрачным промежутком 10 на 10 квадратных пикселей в середине.
Это то, что у меня есть до сих пор:
private Image CreatePicture(){
// Create a new Bitmap object, 32 x 32 pixels in size
Bitmap canvas = new Bitmap(32,32,System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
for(int i=10;i<21;i++){
for(int p=10;p<21;p++){
canvas.SetPixel(i,p,Color.Lime);
}
}
canvas.MakeTransparent(Color.Lime);
// return the picture
return canvas;
}
Это грубо и не будет окончательной "оптимизированной версией" его просто грубой демонстрацией script. Проблема заключается в том, что возвращенное изображение не прозрачно, а просто серая рамка: (.
Любая помощь была оценена.
Майкл
UPDATE: Я обновил script с помощью PixelFormat, установленного в формате Alpha RGB, который он фактически принимает без ошибок во время выполнения. Теперь, если я удалю "canvas.MakeTransparent(Color.Lime)"; строка показывает липовый ящик посередине, он просто показывает серый квадрат того же цвета, что и серый фон; поэтому кажется, что прозрачность распознается просто не подразумевая прозрачность!
private Bitmap CreatePicture(){
// Create a new Bitmap object, 50 x 50 pixels in size
Bitmap canvas = new Bitmap(82,82,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
for(int i=10;i<71;i++){
for(int p=10;p<71;p++){
canvas.SetPixel(i,p,Color.Lime);
}
}
canvas.MakeTransparent(Color.Lime);
// return the picture
return canvas;
}
Это зависит от того, как вы собираетесь использовать или отображать изображение. PNG и Gif - это два формата файлов, которые поддерживают прозрачность.
Для настройки растровой прозрачности я использовал:
Graphics.FromImage(bitmap).FillRectangle(Brushes.Transparent,...), чтобы установить область, которую я хотел как прозрачную, затем я сохранил файл как PNG, чтобы получить изображение с прозрачностью.
Я также попробовал метод MakeTransparent и столкнулся с проблемами, и Brushes.Transparent был решением, которое работало для моей ситуации.
Надеюсь, это даст вам направление для изучения.
Одна последняя заметка: я создаю объект Bitmap только с шириной и высотой, я не указываю формат пикселя или что-то другое, что называется i.e. bitmap = New Bitmap (ширина, высота);
[...]Format16bppRgb555
Попробуйте использовать какой-то формат с альфа-каналом (... Rgba) здесь. Кроме того, если выход будет потом позже, убедитесь, что вы используете формат изображения, такой как PNG, который поддерживает альфа-каналы.
Вероятно, вам нужно изменить формат изображения на Format16bppArgb1555.
В настоящий момент вы используете Format32bppArgb или Format16bppRgb555, который составляет 16 бит на пиксель без альфа-информации. Прозрачность требует наличия альфа-канала или альфа-бита.
Функция MakeTransparent работает. У вас есть "серые пятна", потому что ваш TransparencyKey неверен. Вы обнаружите, что если вы установите для свойства TransparencyKey любой цвет, который имеет серый патч, серые пятна станут прозрачными при отображении вашего изображения. Серый патч по умолчанию, который я получил, был помечен как "Контроль" в цвете или в основном по умолчанию цвет фона Windows Form. Измените свой TransparencyKey на любой ваш серый патч (в моем случае Control), и ваша проблема будет решена, не будет необходимости сохранять файлы на жестком диске. Приветственный помощник.
Разве вы не просто SetPixel()
до Color.Transparent? Вместо Color.Lime тогда MakeTransparent
? И, как отметили другие; вам нужен формат пикселей с альфа-каналом.