Использование Alpha в манипуляциях с изображениями

StackOverflow https://stackoverflow.com/questions/1357616

  •  20-09-2019
  •  | 
  •  

Вопрос

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

    private void SetAlpha(string location)
    {
        //bmp is a bitmap source that I load from an image
        bmp = new BitmapImage(new Uri(location));
        int[] pixels = new int[(int)bmp.Width * (int)bmp.Height];
        //still not sure what 'stride' is.  Got this part from a tutorial
        int stride = (bmp.PixelWidth * bmp.Format.BitsPerPixel + 7)/8;

        bmp.CopyPixels(pixels, stride, 0);
        int oldColor = pixels[0];
        int red = 255;
        int green = 255;
        int blue = 255;
        int alpha = 0;
        int color = (alpha << 24) + (red << 16) + (green << 8) + blue;

        for (int i = 0; i < (int)bmp.Width * (int)bmp.Height; i++)
        {
            if (pixels[i] == oldColor)
            {
                pixels[i] = color;
            }
        }
            //remake the bitmap source with these pixels
            bmp = BitmapSource.Create(bmp.PixelWidth, bmp.PixelHeight, bmp.DpiX, bmp.DpiY, bmp.Format, bmp.Palette, pixels, stride);
        }

    }

У меня есть два изображения, с которыми я тестирую это.Изображение1 похоже на то, над чем я собираюсь работать, в исходном изображении нет прозрачности.Image2 уже имеет прозрачность.Я думал, что было бы легко просто получить значение из image2 (0x00ffffff), но это просто сделает его белым и закроет все изображения позади.

Оба изображения имеют формат PNG, формат Bgr32.

Кто-нибудь знает, как сделать изображение прозрачным?

Это было полезно?

Решение

Как насчет использования Бгра32?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top