本人已经将图片转为二进制,存入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;
}
但是现在压根就得不到 图片格式
系统为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;
}
但是现在压根就得不到 图片格式
解决方案
5
十有八九 是数据压根就没对
把你的mMemoryS 保存成文件看看是什么数据
例如保存到 c:\123.jpg 看看用系统自带的图片管理器能否打开
或 直接用用16进制编辑工具 打开看看数据能否是正常的jpg文件数据
把你的mMemoryS 保存成文件看看是什么数据
例如保存到 c:\123.jpg 看看用系统自带的图片管理器能否打开
或 直接用用16进制编辑工具 打开看看数据能否是正常的jpg文件数据
10
你可以使用其它比较专业的工具去“压缩”。
但是你确定这是原因是没有压缩而造成的问题吗?
你没有给出图片的大小参数,给出了参数,才知道真实的东西。对于大图,从源头上就应该切成多个小图(例如1024×1024的),而不应该以大图为目标。
但是你确定这是原因是没有压缩而造成的问题吗?
你没有给出图片的大小参数,给出了参数,才知道真实的东西。对于大图,从源头上就应该切成多个小图(例如1024×1024的),而不应该以大图为目标。
10
别说32M,就算是上 T 的图本人也见过。而上 T 的图其实就是一些(几千万幅) 256×256 尺寸的小图组成的。
15
别说32M –> 别说30M
不过,30M并不算很大。你还是可以在原来的代码 mDT.Rows[0][“PictureFile”] 这里去研究一下,从数据库读取 BLOB 数据的方法不止这一种。可能是代码的问题。
不过,30M并不算很大。你还是可以在原来的代码 mDT.Rows[0][“PictureFile”] 这里去研究一下,从数据库读取 BLOB 数据的方法不止这一种。可能是代码的问题。