Есть ли способ отобразить изображение в WPF, хранящемся в памяти? - PullRequest
3 голосов
/ 24 февраля 2010

Я получил что-то вроде приложения для создания скриншотов. (удалось сериализовать, слава богу !!!) Когда нажата кнопка, делается снимок экрана путем доступа к методу обработки classe. Теперь сложная часть состоит в том, что у класса есть другой метод для работы с вышеупомянутым результатом, таким образом, когда вызывается соответствующий метод обработки, создается окно (показано), и растровое изображение должно входить в контейнер отображения это окно. Проблема в том, что до сих пор я заметил, что в WPF источник элемента управления изображением нельзя отнести к переменной, которая хранит изображение. Как я могу отобразить изображение, хранящееся в этой переменной, без необходимости сначала сохранять его, получать URI и т. Д.

Ответы [ 2 ]

5 голосов
/ 24 февраля 2010

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

http://forums.silverlight.net/forums/p/44637/166282.aspx

http://www.wpftutorial.net/Images.html

2 голосов
/ 24 февраля 2010

спасибо за ссылки, слагстер. Вот как я это сделал:

MemoryStream ms = new MemoryStream();
sBmp = gBmp; //note: gBmp is a variable that stores the captured image and passes it on to the method that uses sBMP as a distribuitor of the variable holding the captured image data
//variable that holds image
sBmp.Save(ms,ImageFormat.Bmp);
//my buffer byte
byte[] buffer = ms.GetBuffer();
//Create new MemoryStream that has the contents of buffer
MemoryStream bufferPasser = new MemoryStream(buffer);
//Creates a window with parents classthatholdsthismethod and null
Edit childEdit = new Edit(this, null);
childEdit.Show();
//I create a new BitmapImage to work with
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = bufferPasser;
bitmap.EndInit();
//I set the source of the image control type as the new BitmapImage created earlier.
childEdit.imgImageCanvas.Source = bitmap;
childEdit.Activate();

Я в основном объединил то, что нашел на этих страницах, с некоторой информацией о том, как передать bmp в memstream. Я получил это на работу 100%:)

...