因为编程中经常遇到要将图片或文件转换为byte[]数组的,但是思路比较混乱,感觉有很多方法,又不知道具体有些什么方法及各方法之间的区别.好像有用过memorystream,Binarybyte什么之类的,但是很模糊.不清楚各自的用法和区别.我希望大家能介绍下大家知道的几种方法将"e:\image.ico"转换成字节数组.
要求:
(1)介绍一下该方法,并要写出如何使用该方法
(2)介绍任意几种已提供方法之间的区别(比如介绍1楼和2楼所给方法的区别)给分:每介绍一种方法给予10分(如果两种方法相同,根据使用方法的详细与否给分.如果均相同则根据早到早得的方法给分);
每介绍一次几种方法间的区别,给10分(如果已有人介绍过,则根据详细与否给分)注:如果按照以上方法给分后分数仍有剩余,则平分剩余的分数.如果分数不够,我会另外加分.当然大家也可以推荐下其它文章或链接什么的.以上给分方法按照具体情况具体处理.最终解释权归:stg609.
要求:
(1)介绍一下该方法,并要写出如何使用该方法
(2)介绍任意几种已提供方法之间的区别(比如介绍1楼和2楼所给方法的区别)给分:每介绍一种方法给予10分(如果两种方法相同,根据使用方法的详细与否给分.如果均相同则根据早到早得的方法给分);
每介绍一次几种方法间的区别,给10分(如果已有人介绍过,则根据详细与否给分)注:如果按照以上方法给分后分数仍有剩余,则平分剩余的分数.如果分数不够,我会另外加分.当然大家也可以推荐下其它文章或链接什么的.以上给分方法按照具体情况具体处理.最终解释权归:stg609.
FileStream stream = null;
string dev = System.Environment.SystemDirectory.ToString();
rtbSignMeaning.SaveFile( dev.Substring(0,3)+"Sign.rtf" );
stream = new FileStream(dev.Substring(0,3)+"Sign.rtf", FileMode.Open, FileAccess.Read); int size = Convert.ToInt32(stream.Length);
signMeaningImage = new Byte[size];
stream.Read(signMeaningImage, 0, size);
stream.Close();
最终解释权归:viki117
哎,我郁闷啊
http://www.idcnews.net/html/edu/net/20071224/12351.html
http://www.chenjiliang.com/Article/View.aspx?ArticleID=2410&TypeID=84
http://i.yiqifei.com/s.sams/articles/325.html
{
string GetUrlPath = GetImages(strImageName);
ImageClass ic=new ImageClass();
FileStream fs = new FileStream(GetUrlPath, FileMode.Open, FileAccess.Read);
Byte[] img= new Byte[fs.Length];
try
{
fs.Read(img, 0, Convert.ToInt32(fs.Length));
}
catch(Exception ex)
{
Debug.WriteLine(ex.Message+ex.StackTrace);
}
fs.Close();
ic.myImage=img;
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms,ic);
return ms.ToArray();
}
viki117 提供的代码是通过filestream的read方法将文件读到数组中xray2005 在vikill7的基础上加上了BinaryFormatter和MemoryStream,最后返回一个数组.
但是为什么要再通过
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms,ic);
return ms.ToArray();
返回数组,而不是直接返回img呢?另外很感谢Kshatriya提供的链接.大家还有什么其它方法或什么的没?
Image img = Image.FromFile(@"e:\image.ico");
System.IO.MemoryStream ms = new System.IO.MemoryStream();
img.Save(ms, img.RawFormat); byte bytes = ms.GetBuffer();
(1)我的问题并不就是序列化和反序列化的问题.应该说序列化和反序列化只是其中一种方法.(2)duping9626 的方法和前面几种有点不同,主要是通过memorystrem将文件保存到内存中,然后得到从内在流中取出byte数组另提几点意见:
(1)大家如果能赋上点说明注释,那我看起来就更方便了,嘿嘿.
(2)大家也可以谈谈几种用法之前的区别.大家多多捧场哦!如果还有什么方法,尽管提出来.
自我感觉:
序列化和反序列化对于要求能"从数据->文件,并能从文件->数据"的情况能处理的很好.大家还有其它方法的吗?