WriteableBitmap добавляет черный отступ справа - PullRequest
0 голосов
/ 16 ноября 2011

Я пытаюсь сделать Image из одного из моих Canvas (myPrintingCanvas).Но ширина изображения становится как минимум в два раза шире, чем у Canvas, и созданное дополнительное пространство возвращается.Если я попробую другой Canavas (LayoutRoot), он будет работать как положено.

Я заметил, что на myPrintingCanvas ActualWidth всегда равен 0. LayoutRoot имеет правильное значение ActualWidth.Не уверен, что это как-то связано с дополнительным заполнением, и мне не удалось получить ActualWidth для myPrintingCanvas (используя UpdateLayout и Measure).

Код:

//Code to render the content of myPrintingCanvas
...

//Make the WriteableBitmap 
WriteableBitmap myWriteableBitmap = new WriteableBitmap(myPrintingCanvas, null);

1 Ответ

0 голосов
/ 16 ноября 2011

Вы пытались создать WriteableBitmap с фиксированным размером, а затем вызвать его Render метод для рендеринга растрового изображения? Canvas имеет некоторые странные поведения, потому что является анти-паттерном в Silverlight и WPF и нарушает многие правила макета. Код для создания фиксированного размера WriteableBitmap и его рендеринга будет выглядеть примерно так:

        int width = 640;
        int height = 480;
        WriteableBitmap bmp = new WriteableBitmap(width, height);
        bmp.Render(myPrintingCanvas, null);
        bmp.Invalidate();

Одним из преимуществ этого метода является то, что если вам нужно захватить несколько изображений, вы можете использовать один и тот же WriteableBitmap вместо того, чтобы воссоздавать его каждый раз.

...