二进制打开图片,图片大小为30M jpg格式,内存不足

gishys 2016-09-18 12:35:29
我已经将图片转为二进制,存入oracle 数据,现在想在picturebox中打开,打开报内存不足,图片大小为30M jpg格式,
系统为32位,内存4G
存入方式
File.ReadAllBytes ;
打开方式
byte[] mByte = mDT.Rows[0]["PictureFile"] as byte[];
MemoryStream mMemoryS = new MemoryStream(mByte);
Bitmap mBitmap = new Bitmap(mMemoryS);这个为报错位置
本来想压缩图片大小
public static Bitmap ResizeBitmap(Bitmap ExBitmap,int width,int height)
{
Bitmap mBitmap = new Bitmap(width, height);
Graphics mGraphics = Graphics.FromImage(mBitmap);
mGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
mGraphics.DrawImage(ExBitmap, new Rectangle(0, 0, width, height),
new Rectangle(0, 0, ExBitmap.Width, ExBitmap.Height), GraphicsUnit.Pixel);
mGraphics.Dispose();
return mBitmap;
}
但是现在压根就得不到 图片格式
...全文
541 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gishys 2016-09-18
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
别说32M --> 别说30M 不过,30M并不算很大。你还是可以在原来的代码 mDT.Rows[0]["PictureFile"] 这里去研究一下,从数据库读取 BLOB 数据的方法不止这一种。可能是代码的问题。
完美解决问题,换成SqlCommand cmd=new SqlCommand(sql,con); SqlDataReader sdr = cmd.ExecuteReader();,问题解决,就是不知道DataTable怎么就不行。
gishys 2016-09-18
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
别说32M --> 别说30M 不过,30M并不算很大。你还是可以在原来的代码 mDT.Rows[0]["PictureFile"] 这里去研究一下,从数据库读取 BLOB 数据的方法不止这一种。可能是代码的问题。
直接以文件形式打开(Image.FromFile),虽然慢一点,还是可以打开。存入数据库再读取就出为题,我改改读取方式,谢谢大神的回复
gishys 2016-09-18
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
你可以使用其它比较专业的工具去“压缩”。 但是你确定这是因为没有压缩而造成的问题吗? 你没有给出图片的大小参数,给出了参数,才知道真实的东西。对于大图,从源头上就应该切成多个小图(例如1024x1024的),而不应该以大图为目标。
图片打下是:width
引用 3 楼 sp1234 的回复:
你可以使用其它比较专业的工具去“压缩”。 但是你确定这是因为没有压缩而造成的问题吗? 你没有给出图片的大小参数,给出了参数,才知道真实的东西。对于大图,从源头上就应该切成多个小图(例如1024x1024的),而不应该以大图为目标。
图片尺寸: width 19488 像素 height 14172 像素,确实不确定,我切开图片试试
  • 打赏
  • 举报
回复
别说32M --> 别说30M 不过,30M并不算很大。你还是可以在原来的代码 mDT.Rows[0]["PictureFile"] 这里去研究一下,从数据库读取 BLOB 数据的方法不止这一种。可能是代码的问题。
  • 打赏
  • 举报
回复
别说32M,就算是上 T 的图我也见过。而上 T 的图其实就是一些(几千万幅) 256x256 尺寸的小图组成的。
  • 打赏
  • 举报
回复
你可以使用其它比较专业的工具去“压缩”。 但是你确定这是因为没有压缩而造成的问题吗? 你没有给出图片的大小参数,给出了参数,才知道真实的东西。对于大图,从源头上就应该切成多个小图(例如1024x1024的),而不应该以大图为目标。
gishys 2016-09-18
  • 打赏
  • 举报
回复
引用 1 楼 crystal_lz 的回复:
十有八九 是数据压根就没对 把你的mMemoryS 保存成文件看看是什么数据 比如保存到 c:\123.jpg 看看用系统自带的图片管理器能否打开 或者 直接用用16进制编辑工具 打开看看数据是否是正常的jpg文件数据
数据没问题,我换了小一点的图,可以正常运行,大的就内存不足,有什么思路可以解决吗
crystal_lz 2016-09-18
  • 打赏
  • 举报
回复
十有八九 是数据压根就没对 把你的mMemoryS 保存成文件看看是什么数据 比如保存到 c:\123.jpg 看看用系统自带的图片管理器能否打开 或者 直接用用16进制编辑工具 打开看看数据是否是正常的jpg文件数据

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧