Xamarin Android System.Drawing.Image 备选方案
Xamarin Android System.Drawing.Image alternative
理想情况下想做类似
的事情
AssetManager assets = this.Assets;
using (StreamReader sr = new StreamReader(assets.Open("test.png")))
{
var img = System.Drawing.Image.FromStream(sr.BaseStream);
}
但 Xamarin Android 不存在 System.Drawing.Image class
。
我怎样才能实现上述目标?
我找到了一个替代方法来克服缺失的 System.Drawing.Image
。
我用过以下:
using (StreamReader sr = new StreamReader(assets.Open("test.png")))
{
BinaryReader binreader = new BinaryReader(sr.BaseStream);
var allData = ReadAllBytes(binreader);
Bitmap bitmap = BitmapFactory.DecodeByteArray(allData, 0, allData.Length);
imageView.SetImageBitmap(bitmap);
}
和
public static byte[] ReadAllBytes(BinaryReader reader)
{
const int bufferSize = 4096;
using (var ms = new MemoryStream())
{
byte[] buffer = new byte[bufferSize];
int count;
while ((count = reader.Read(buffer, 0, buffer.Length)) != 0)
ms.Write(buffer, 0, count);
return ms.ToArray();
}
}
理想情况下想做类似
的事情AssetManager assets = this.Assets;
using (StreamReader sr = new StreamReader(assets.Open("test.png")))
{
var img = System.Drawing.Image.FromStream(sr.BaseStream);
}
但 Xamarin Android 不存在 System.Drawing.Image class
。
我怎样才能实现上述目标?
我找到了一个替代方法来克服缺失的 System.Drawing.Image
。
我用过以下:
using (StreamReader sr = new StreamReader(assets.Open("test.png")))
{
BinaryReader binreader = new BinaryReader(sr.BaseStream);
var allData = ReadAllBytes(binreader);
Bitmap bitmap = BitmapFactory.DecodeByteArray(allData, 0, allData.Length);
imageView.SetImageBitmap(bitmap);
}
和
public static byte[] ReadAllBytes(BinaryReader reader)
{
const int bufferSize = 4096;
using (var ms = new MemoryStream())
{
byte[] buffer = new byte[bufferSize];
int count;
while ((count = reader.Read(buffer, 0, buffer.Length)) != 0)
ms.Write(buffer, 0, count);
return ms.ToArray();
}
}