【求助】请问 一个 image 图片转换成Byte[]数组的问题

猴头 猴头 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
RT,我有一个Image图片 格式不一定,然后我通过MemoryStream流将图片保存在一个Byte数组中,然后将整个Byte数组 以二进制的形式保存在文件里面,接着从该文件中读取字节留到byte数组, 再转换成 Image图片,那么在从文件中读取字节流的时候读取出来的数据保存在Byte数组里面,那么整个 byte数组 应该定义多大呢???

说 不好说清楚,我上代码吧,帮我看看 会不会 造成数组不够长的情况:
代码写入文件的:


System.IO.MemoryStream ms = new System.IO.MemoryStream();
this._image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] bytes = new byte[] { };
bytes = ms.GetBuffer();
outStream.writeByteArray(bytes);
//上面是转换为byte数组,下面这段是写入文件:
public void writeByteArray(byte[] bytes)
{
long length = bytes.Length;
byte[] tbs = BitConverter.GetBytes(length);
for (int i = 0; i < tbs.Length; i++)
{
writer.Write(tbs[i]);
}
for (int i = 0; i < bytes.Length; i++)
{
writer.Write(bytes[i]);
}
}



读取文件数据的代码:



public byte[] readBytesArray()
{
ulong temp = 0;
ulong length = (ulong)BitConverter.GetBytes(temp).Length;
byte[] byLen = new byte[length];
for (ulong i = 0; i < length; i++)
{
byLen[i] = cacheBuff[this.position++];
}
length = BitConverter.ToUInt64(byLen, 0);
byte[] bytes = new byte[length];
for (ulong i = 0; i < length; i++)
{
bytes[i] = cacheBuff[this.position++];
}

return bytes;
}

然后转换成image图片的代码如下:

byte[] bytes = inStream.readBytesArray();
System.IO.MemoryStream ms = new System.IO.MemoryStream();
ms.Write(bytes,0,bytes.Length);
this._image = Bitmap.FromStream(ms);



这两段代码这样写,会不会造成 图片信息 丢失呢??

如果 有可能发生 异常的问题,那么 合理的写法 该如何写呢??

谢谢 大家 帮忙了

发到 这个 板块 也不知道 位置发的对不对

...全文

相关推荐

如何将图片转换成二进制存储

图片的常见存储与读取凡是有以下几种: 存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[]. 1.参数是图片路径:返回Byte[]类型: public byte[] GetPictureData(string imagepath) { /**/////根据图片文件的路径使用文件流打开,并保存为byte[] FileStream fs = new FileStream(imagepath, FileMode.Open);//可以是其他重载方法 byte[] byData = new byte[fs.Length]; fs.Read(byData, 0, byData.Length); fs.Close(); return byData; }2.参数类型是Image对象,返回Byte[]类型: public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto) { //将Image转换成流数据,并保存为byte[] MemoryStream mstream = new MemoryStream(); imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp); byte[] byData = new Byte[mstream.Length]; mstream.Position = 0; mstream.Read(byData, 0, byData.Length); mstream.Close(); return byData; }好了,这样通过上面的方法就可以把图片转换成Byte[]对象,然后就把这个对象保存到数据库中去就实现了把图片的二进制格式保存到数据库中去了。下面我就谈谈如何把数据库中的图片读取出来,实际上这是一个相反的过程。 读取图片:把相应的字段转换成Byte[]即:Byte[] bt=(Byte[])XXXX 1.参数是Byte[]类型,返回值是Image对象: public System.Drawing.Image ReturnPhoto(byte[] streamByte) { System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte); System.Drawing.Image img = System.Drawing.Image.FromStream(ms); return img; }2.参数是Byte[] 类型,没有返回值,这是针对asp.net中把图片从输出到网页上(Response.BinaryWrite) public void WritePhoto(byte[] streamByte) { // Response.ContentType 的默认值为默认值为“text/html” Response.ContentType = "image/GIF"; //图片输出的类型有: image/GIF image/JPEG Response.BinaryWrite(streamByte); }补充: 针对Response.ContentType的值,除了针对图片的类型外,还有其他的类型: Response.ContentType = "application/msword"; Response.ContentType = "application/x-shockwave-flash"; Response.ContentType = "application/vnd.ms-excel";另外可以针对不同的格式,用不同的输出类型以适合不同的类型: switch (dataread("document_type")) { case "doc": Response.ContentType = "application/msword"; case "swf": Response.ContentType = "application/x-shockwave-flash"; case "xls": Response.ContentType = "application/vnd.ms-excel"; case "gif": Response.ContentType = "image/gif"; case "Jpg": Response.ContentType = "image/jpeg"; }

贺翔

转换Image数据为byte数组

将Image数据转换为byte数组,便于网络图片传输

hjyccc

Java将图片转换为byte数组例子总结

做Java课程设计有用到的例子,是个看了就能上手的例子。

八月号

Image 和Byte数组之间转换

此资源为 txt文档,里面有两个方法 分别是Image转换成Byte数组 和byte转换成Image

WIKESOFT

C# 图片转成byte存入,数据库读取byte转成图片的类

C# 图片转成byte存入,数据库读取byte转成图片的类

lishuangzs
评论 18
收藏 已收藏
分享
返回顶部
猴头
图表区 4,818 成员 14,133 内容