Создать изображение с некоторыми прозрачными частями

2

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;
}
  • 0
    для тех, кто спрашивает, я не собираюсь сохранять изображение, просто отображая его
  • 0
    просто интересно, если это используется для какой-то автоматизированной иконки?
Теги:
image
bitmap

5 ответов

2
Лучший ответ

Это зависит от того, как вы собираетесь использовать или отображать изображение. PNG и Gif - это два формата файлов, которые поддерживают прозрачность.

Для настройки растровой прозрачности я использовал:

Graphics.FromImage(bitmap).FillRectangle(Brushes.Transparent,...), чтобы установить область, которую я хотел как прозрачную, затем я сохранил файл как PNG, чтобы получить изображение с прозрачностью.

Я также попробовал метод MakeTransparent и столкнулся с проблемами, и Brushes.Transparent был решением, которое работало для моей ситуации.

Надеюсь, это даст вам направление для изучения.

Одна последняя заметка: я создаю объект Bitmap только с шириной и высотой, я не указываю формат пикселя или что-то другое, что называется i.e. bitmap = New Bitmap (ширина, высота);

  • 0
    спасибо за помощь, но ни один из них, кажется, не делает различий в том же сером поле
  • 0
    Хорошо, все еще получаю серое поле на экране, но когда я вызываю "canvas.Save (" Test.png ", System.Drawing.Imaging.ImageFormat.Png);" перед возвратом сохраненное изображение имеет полную прозрачность! Теперь я вижу, проблема должна быть что-то еще :(.
3
[...]Format16bppRgb555

Попробуйте использовать какой-то формат с альфа-каналом (... Rgba) здесь. Кроме того, если выход будет потом позже, убедитесь, что вы используете формат изображения, такой как PNG, который поддерживает альфа-каналы.

1

Вероятно, вам нужно изменить формат изображения на Format16bppArgb1555.

В настоящий момент вы используете Format32bppArgb или Format16bppRgb555, который составляет 16 бит на пиксель без альфа-информации. Прозрачность требует наличия альфа-канала или альфа-бита.

  • 0
    я попробовал это, и я получил: «Необработанное исключение: System.NotImplementedException: запрошенная функция не реализована [GDI + status: NotImplemented] в System.Drawing.GDIPlus.CheckStatus (Status status) [0x00000] в System.Drawing.Bitmap .. ctor (ширина Int32, высота Int32, .... ":(
  • 0
    Хм ... Возможно, вам нужно перейти к Format32bppArgb. Это должно работать (это займет больше места), но, как уже упоминалось в другом посте, вы захотите сохранить его в формате PNG, чтобы сохранить альфа-канал.
0

Функция MakeTransparent работает. У вас есть "серые пятна", потому что ваш TransparencyKey неверен. Вы обнаружите, что если вы установите для свойства TransparencyKey любой цвет, который имеет серый патч, серые пятна станут прозрачными при отображении вашего изображения. Серый патч по умолчанию, который я получил, был помечен как "Контроль" в цвете или в основном по умолчанию цвет фона Windows Form. Измените свой TransparencyKey на любой ваш серый патч (в моем случае Control), и ваша проблема будет решена, не будет необходимости сохранять файлы на жестком диске. Приветственный помощник.

0

Разве вы не просто SetPixel() до Color.Transparent? Вместо Color.Lime тогда MakeTransparent? И, как отметили другие; вам нужен формат пикселей с альфа-каналом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню