Как создать изображение и сохранить его в файл в WPF - PullRequest
1 голос
/ 26 мая 2011

Я хочу создать новое пустое изображение размером 100x100. Нарисуйте его красным и сохраните изображение как «test.png». Могу ли я получить доступ / изменить значения пикселей созданного изображения. Как я могу сделать это в WPF.

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Вы можете использовать WritableBitmap для этого, затем вы можете использовать BitmapEncoder для кодирования изображения и его сохранения.

var bitmap = new WriteableBitmap(100, 100, 96, 96, PixelFormats.Pbgra32, null);
var rect = new Int32Rect(0, 0, 100, 100);
var channelCount = 4;
var pixels = new byte[100 * 100 * channelCount];
for (int i = 0; i < 100 * 100 * channelCount; i+=channelCount)
{
    pixels[i + 2] = (byte)255; // Set red channel
    pixels[i + 3] = (byte)255; // Set alpha channel
}
bitmap.WritePixels(rect, pixels, channelCount * 100, 0);

var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
using (var stream = new FileStream(@"C:\Users\Public\Test.png", FileMode.Create))
{
    encoder.Save(stream);
}
0 голосов
/ 26 мая 2011

Если вы хотите использовать вместо Shapes вы можете сделать это

            var rtb = new RenderTargetBitmap(100, 100, 96, 96, PixelFormats.Pbgra32);

        var rectangle = new Rectangle();

        rectangle.BeginInit();
        rectangle.Height = 100;
        rectangle.Width = 100;
        rectangle.Stroke = Brushes.Red;
        rectangle.Fill = Brushes.Red;
        rectangle.StrokeThickness = 1.0;
        rectangle.Margin = new Thickness(0, 0, 0, 0);
        rectangle.EndInit();


        rectangle.Arrange(new Rect(new Size(100, 100)));
        rectangle.UpdateLayout();

        rtb.Render(rectangle);

        var png = new PngBitmapEncoder();
        png.Frames.Add(BitmapFrame.Create(rtb));
        using (Stream fs = File.Create("test.png"))
        {
            png.Save(fs);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...