Create BitmapImage and apply to it a specific Color

c#, wpf

Solution

You can create `ImageBrush` from `BitmapSource`:

    private BitmapSource CreateBitmapSource(System.Windows.Media.Color color)
    {
        int width = 128;
        int height = width;
        int stride = width / 8;
        byte[] pixels = new byte[height * stride];

        List<System.Windows.Media.Color> colors = new List<System.Windows.Media.Color>();
        colors.Add(color);
        BitmapPalette myPalette = new BitmapPalette(colors);

        BitmapSource image = BitmapSource.Create(
            width,
            height,
            96,
            96,
            PixelFormats.Indexed1,
            myPalette,
            pixels,
            stride);

        return image;
    }

Problem

I got stuck how to create `BitmapImage` based on some color value? For example I have string "Black" so I need black BitmapImage. How it could be done? Thank you! -- UPDATES (I put this code for @StephenChung) The idea is to do Grid with any opacity and don't apply opacity to its children. So I create an image by ANY color I need and apply opacity for it. ``` BitmapSource bs = CreateBitmapSource(GetBackgroundColorValue()); // and here I use method of @StaWho CreateBitmapSource() ImageBrush ib2 = new ImageBrush(bs); ib2.Opacity = Opacity; ib2.Stretch = Stretch.Fill; RootGrid.Background = ib2; ```

Original source