我一直在寻找几天,有关如何转换填充imageData的byte []的所有当前答案使我回到这段代码:
using (var ms = new MemoryStream(byte[]))
{
Bitmap bit = new Bitmap(ms);
}
至少是这样的(到目前为止,我已经制作了很多版本。我不记得原始版本了) 但是无论我如何使用它,当我尝试将流放入位图中时,总是得到该参数的“参数无效”。
这是我目前的保存方式:
private static byte[] ConvertToByteArr(Bitmap bitmap)
{
byte[] result;
MemoryStream stream = new MemoryStream();
bitmap.Save(stream, ImageFormat.Bmp);
result = stream.ToArray();
return result;
}
并在将字典保存到.txt文件时调用它
这就是我尝试再次阅读的方式。
TextReader reader = new StreamReader(trainingPath + "\\" + filename + ".txt");
Dictionary<string, string> tempDict = new Dictionary<string, string>();
String line;
String[] parts;
List<string> names = new List<string>();
while ((line = reader.ReadLine()) != null)
{
parts = line.Split('=');
string key = parts[0];
string value = parts[1];
tempDict.Add(key, value);
Console.WriteLine("added " + key + " to temp Dict");
byte[] byteArr = Encoding.ASCII.GetBytes(tempDict[key]);
MemoryStream ms = new MemoryStream(byteArr);
Bitmap bit = new Bitmap(Image.FromStream(ms));
parts[0] = null;
parts[1] = null;
}
一切正常,直到位图位=新的位图(Image.Fromstream(ms))行为止。
答案 0 :(得分:0)
不建议使用Encoding.GetBytes()和Encoding.GetString()。
有时上述相互转换无法顺利进行。
(就像您经历过的一样)
我建议使用十六进制字符串。
您可以按以下方式将字节数组转换为字符串(十六进制):
byte[] byteArr = ConvertToByteArr(bitmap);
string str = BitConverter.ToString(byteArr).Replace("-", "");
另外,您可以按如下所示将字符串(如上所述)转换为字节数组:
private byte[] HexaToBytes(string str)
{
byte[] byteArr = new byte[str.Length / 2];
for (int i = 0; i < byteArr.Length; i++)
{
string s = str.Substring(i * 2, 2);
byteArr[i] = Convert.ToByte(s, 16);
}
return byteArr;
}
答案 1 :(得分:0)
从文本文件中读取时,请确保正在使用编码。 我尝试了一个示例代码,使用与上述提到的相同方法(ConvertToByteArr)将位图作为byte []保存到文本文件中。 当我尝试从该保存的文本文件的streamreader读取的memorystream中创建位图对象时,遇到了相同的错误。
但是当我使用ASCII编码时,效果很好。
TextReader reader = new StreamReader(textfile,Encoding.ASCII,true);