2013-06-19 11 views
1

Я создаю объект WriteableBitmap, нарисую линию и попытаюсь установить ее как источник для управления Image. По какой-то причине программа перестает отвечать на запросы, а затем закрывается через 5 секунд, когда я пытаюсь установить источник. Кто-нибудь знает, что случилось? (Я также использую WriteableBitmapEx)WriteableBitmap завершает работу программы без сообщений?

WriteableBitmap bit = new WriteableBitmap(400, 400, 96, 96, PixelFormats.Bgr32, null); 
WriteableBitmapExtensions.DrawLine(bit, 10, 10, 300, 300, Core.PrimaryColor.ColorValue); 
ImageCanvas.Source = bit; // Sets the image to our bitmap, but program crashes for some reason! 

ответ

3

Когда я пробую свой код, он бросает ArgumentException говоря

вход WriteableBitmap должен иметь формат пикселя Pbgra32. Используйте метод BitmapFactory.ConvertToPbgra32Format автоматически преобразовать любой входной BitmapSource в нужный формат принятого этим класса \ г \ nParametername:. WriteableBitmap

Следовательно, это работает:

var bitmap = new WriteableBitmap(400, 400, 96, 96, PixelFormats.Pbgra32, null); 
WriteableBitmapExtensions.DrawLine(bitmap, 10, 10, 300, 300, Colors.Black); 
image.Source = bitmap; 

UPDATE: Как отмеченный Андерсом, вы, возможно, должны использовать переносимый метод растрового изображения, предоставленный WriteableBitmapEx, для создания вашего растрового изображения:

var bitmap = BitmapFactory.New(400, 400); 
WriteableBitmapExtensions.DrawLine(bitmap, 10, 10, 300, 300, Colors.Black); 
image.Source = bitmap; 
+3

+1 для определения этого. Просто хочу добавить, что * WriteableBitmapEx * также предоставляет переносимый метод для создания 'WriteableBitmap': s,' BitmapFactory.New (int pixelWidth, int pixelHeight) '. Для WPF этот метод использует точно указанные выше аргументы конструктора. Использование фабричного метода вместо явного конструктора на основе WPF упрощает перенос кода на другие платформы, если это необходимо. –

+0

Отличное спасибо, @AndersGustafsson +1 для 'BitmapFactory.New' – Oztaco

Смежные вопросы