Самый быстрый способ преобразовать холст в записываемый битмап в WPF?

В настоящее время у меня есть одно записываемое растровое изображение и холст с рисунками, и я хочу отправить изображения одноранговому узлу. Чтобы уменьшить пропускную способность, я хотел бы преобразовать холст в записываемое растровое изображение, поэтому я могу преобразовать оба изображения в новое записываемое растровое изображение. Проблема в том, что я не могу найти хороший способ конвертировать холст. Поэтому я хотел бы спросить, есть ли прямой способ преобразовать холст в класс writeablebitmap.


person Adam Aiken    schedule 17.04.2013    source источник
comment
Я использую С# с WPF.   -  person Adam Aiken    schedule 17.04.2013


Ответы (1)


Это взято из этот пост в блоге, но вместо записи в файл он записывает в WriteableBitmap.

public WriteableBitmap SaveAsWriteableBitmap(Canvas surface)
{
    if (surface == null) return null;

    // Save current canvas transform
    Transform transform = surface.LayoutTransform;
    // reset current transform (in case it is scaled or rotated)
    surface.LayoutTransform = null;

    // Get the size of canvas
    Size size = new Size(surface.ActualWidth, surface.ActualHeight);
    // Measure and arrange the surface
    // VERY IMPORTANT
    surface.Measure(size);
    surface.Arrange(new Rect(size));

    // Create a render bitmap and push the surface to it
    RenderTargetBitmap renderBitmap = new RenderTargetBitmap(
      (int)size.Width, 
      (int)size.Height, 
      96d, 
      96d, 
      PixelFormats.Pbgra32);
    renderBitmap.Render(surface);


    //Restore previously saved layout
    surface.LayoutTransform = transform;

    //create and return a new WriteableBitmap using the RenderTargetBitmap
    return new WriteableBitmap(renderBitmap);

}
person keyboardP    schedule 17.04.2013