У меня есть прямоугольник, для которого я хочу установить OpacityMask. Я попробовал это прямо из изображения PNG, которое работало. Но поскольку мое изображение поступает из базы данных позже, я попытался сначала сохранить PNG в массив, а затем восстановить из него BitmapImage. Это то, что у меня есть сейчас:
bodenbitmap = new BitmapImage();
bodenbitmap.BeginInit();
bodenbitmap.UriSource = new Uri(@"C:\bla\plan.png", UriKind.Relative);
bodenbitmap.EndInit();
PngBitmapEncoder enc = new PngBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(bodenbitmap));
using (MemoryStream ms = new MemoryStream())
{
enc.Save(ms);
imagedata = ms.ToArray();
}
ImageSource src = null;
using (MemoryStream ms = new MemoryStream(imagedata))
{
if (ms != null)
{
ms.Seek(0, SeekOrigin.Begin);
PngBitmapDecoder decoder = new PngBitmapDecoder(ms, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
src = decoder.Frames[0];
}
}
Rectangle rec = new Rectangle();
rec.OpacityMask = new ImageBrush(src);
rec.Fill = new SolidColorBrush(Colors.Gray);
Я могу установить высоту и с помощью ImageSource для прямоугольника, но он никогда не заполняется. Однако он полностью правильно заполнен серым цветом, когда я не устанавливаю OpacityMask, и заполняется правильной OpacityMask, когда я устанавливаю его непосредственно из BitmapImage. Но, как я уже сказал, в моем реальном сценарии мне нужно прочитать изображение из базы данных, поэтому я не могу сделать это таким образом.
Любые идеи по этому поводу?
mybmpнигде не объявлен. - person H.B.   schedule 14.08.2014