как получить BitmapImage в codebehind из тега изображения в xaml в wpf / silverlight - PullRequest
1 голос
/ 22 сентября 2011

У меня нет проблемы с привязкой битового изображения к тегу изображения в коде, например, для

BitmapImage image = new BitmapImage();
imagetaginxaml.Source = image; // this will remove whatever image is currently on the image tag in xaml and attach the empty bitmapimage above

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

BitmapImage image = imagetaginxaml.Source;

что мне делать

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Ну, Image.Source имеет тип ImageSource, нет гарантии, что это будет BitmapImage, это может быть хотя. Если источник создан синтаксическим анализатором XAML, это будет BitmapFrameDecode (который является внутренним классом). В любом случае, единственное назначение сохранения:

ImageSource source = img.Source;

в противном случае вам нужно разыграть :

BitmapImage source = (BitmapImage)img.Source;

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

//(Possibly check for img.Source != null first)
BitmapImage source = img.Source as BitmapImage;
if (source != null)
{
     //If img.Source is not null the cast worked.
}
try
{
    BitmapImage source = (BitmapImage)img.Source;
    //If this line is reached it worked.
}
catch (Exception)
{
    //Cast failed
}

Вы также можете предварительно проверить тип, используя img.SourceisBitmapImage.

1 голос
/ 22 сентября 2011

Как насчет использования WriteableBitmap для создания копии изображения, а затем использования MemoryStream для копирования исходного изображения в копию?

// Create a WriteableBitmap from the Image control
WriteableBitmap bmp = new WriteableBitmap(imagetaginxaml, null);

// Load the contents of a MemoryStream from the WritableBitmap
MemoryStream m = new MemoryStream();
bmp.SaveJpeg(m, bmp.PixelWidth, bmp.PixelHeight, 0, 100);

// Read from the stream into a new BitmapImage object
m.Position = 0;
BitmapImage image = new BitmapImage();
image.SetSource(m);

// do something with the new BitmapImage object
// (for example, load another image control)
anotherimagetaginxaml.Source = image;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...