我将BitmapImage转换为byte []时遇到问题。每次我遇到不同的错误时,我尝试了很多解决方案并且没有任何效果。
例如,我找到了很好的解决方案,但它也没有用。它有什么问题?
我使用的是Windows Phone 8.1。
public static byte[] ImageToBytes(BitmapImage img)
{
using (MemoryStream ms = new MemoryStream())
{
WriteableBitmap btmMap = new WriteableBitmap(img);
System.Windows.Media.Imaging.Extensions.SaveJpeg(btmMap, ms, img.PixelWidth, img.PixelHeight, 0, 100);
img = null;
return ms.ToArray();
}
}
这是从这里获取的:Convert Bitmap Image to byte array (Windows phone 8)
没有任何论据符合所要求的形式 参数' pixelHeight' ' WriteableBitmap.WriteableBitmap(int,int)'
类型或命名空间名称'扩展程序'不存在于 namespace' System.Windows.Media.Imaging' (你错过了一个集会吗? 引用?)
或者如果有人知道如何转换它,请发布它。非常感谢您的帮助!
我也试过这个:BitmapImage to byte[]
但使用时存在问题
'的BitmapImage'是System.Windows.Media.Imaging.BitmapImage'之间的模糊参考。和' Windows.UI.Xaml.Media.Imaging.BitmapImage'
所以我用了#34; BitmapEncoder"但它没有像Save和Frame这样的方法。
答案 0 :(得分:1)
我认为在这个平台上无法完成。我将我的项目更改为Windows Phone Silverlight / 8.0,并且可以正常运行。
public static BitmapImage BytesToImage(byte[] bytes)
{
BitmapImage bitmapImage = new BitmapImage();
try
{
using (MemoryStream ms = new MemoryStream(bytes))
{
bitmapImage.SetSource(ms);
return bitmapImage;
}
}
finally { bitmapImage = null; }
}
public static byte[] ImageToBytes(BitmapImage img)
{
using (MemoryStream ms = new MemoryStream())
{
WriteableBitmap btmMap = new WriteableBitmap(img);
System.Windows.Media.Imaging.Extensions.SaveJpeg(btmMap, ms, img.PixelWidth, img.PixelHeight, 0, 100);
img = null;
return ms.ToArray();
}
}
答案 1 :(得分:0)
答案 2 :(得分:0)
你试过吗
MemoryStream ms = new MemoryStream();
WriteableBitmap wb = new WriteableBitmap(myImage);
wb.SaveJpeg(ms, myImage.PixelWidth, myImage.PixelHeight, 0, 100);
byte[] imageBytes = ms.ToArray();
您也可以在此处使用扩展方法
public static class MyExtensions
{
public static Byte[] ByteFromImage(this System.Windows.Media.Imaging.BitmapImage imageSource)
{
Stream stream = imageSource.StreamSource;
Byte[] imagebyte = null;
if (stream != null && stream.Length > 0)
{
using (BinaryReader br = new BinaryReader(stream))
{
imagebyte = br.ReadBytes((Int32)stream.Length);
}
}
return imagebyte;
}
}
然后致电
System.Windows.Media.Imaging.BitmapImage myImage = new System.Windows.Media.Imaging.BitmapImage();
byte[] imageBytes = myImage.ByteFromImage();
答案 3 :(得分:0)
如果您要对图像进行任何转换,则需要使用适当的图像编码器,然后执行如下操作。如果您正在处理多帧图像(例如 TIF),则需要一次将帧添加到编码器,否则您只会获得图像的第一帧。
MemoryStream ms = null;
TiffBitmapEncoder enc = null
enc = new TiffBitmapEncoder();
enc.Compression = TiffCompressOption.Ccitt4;
enc.Frames.Add(BitmapFrame.Create(bmpImg));
using (ms = new MemoryStream())
{
enc.Save(ms);
}
return ms.ToArray();