TBitmap 存储空间不足,无法处理此命令 我在处理图像显示时,首先通过TPicture对象的LoadFromFile加载一个影像文件,然后把这个影像通过aBitmap.Assign(aPicture.Graphic)付给一个TBitmap对象,但是当图像过大时,总是会提示‘存储空间不足,无法处理此命令’。请问这是怎么回事?都有哪些因素会导致出现该类型的错误?对于大图像(JPEG格式的),我应该如何处理才能够正常的显示而不会出现上诉错误?请各位高手帮忙! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 image 是无法处理过大的图片,用GDI+来显示应该没问题 按理说,图像宽度最大为10922像素左右。对于大图片,可以用分块显示办法解决。aBitmap.Width :=100;aBitmap.Height :=100;aBitmap.Canvas.CopyRect(Rect(0,0,100,100),Image1.Canvas,Rect(100,100,200,200));上面代码是显示区域为(100,100,200,200)的图像 image对图像大小是有要求的,太大就会报错 用GDI+应该如何处理呢?我没有用过,请高手给个例子看一下吧,谢谢! 多大啊?20k*20k*24-bits的两张bmp是没问题的const IWidth = 1024*20; IHeight = 1024*20;var bmp1, bmp2 : TBitmap;begin Caption := 'creating!'; bmp1 := TBitmap.Create; try bmp1.PixelFormat := pf24bit; bmp1.Width := IWidth; bmp1.Height := IHeight; bmp2 := TBitmap.Create; try bmp2.Assign(bmp1); Caption := 'done'; finally bmp2.Free; end; finally bmp1.Free; end;end; 请问一下,该错误和机器配置有没有关系?因为我测试的时候同一张票据影像在不同配置的机器上表现不一样,配置高的可以正常处理,配置低的则会弹出该错误提示。还有,如果分区域显示的话,TPicture对象加载的影像太大的话会不会出现该错误? 最大的图像具体是多少我不记得了,但是可以计算一下,最长的票据为3米左右,扫描分辨率为300dpi,大概为118*300。 默认的bmp是从设备相关位图(ddb)创建的设备无关位图(dib),前者是由硬件决定的,后者是由用户态程序的虚拟地址决定的长3米,宽呢?打算用多少位色来保存? 宽大概也就10几厘米,宽应该不用考虑吧。扫描的时候采用的彩色(24位),分辨率为300DPI,保存的格式为JPEG 300*118 * 300*4 * 3 < 125M,就算32-bits(对不支持alpha的bmp和jpeg除了速度可能会快点儿的话的确没意义)也才160M多点儿,这个尺寸的bmp放内存完全没问题,不知道为什么Assign一个jpeg就会出问题。试试自己建一个再复制?需要注意的是,在设W*H之前先指定PixelFormat,否则默认的pfDevice就是ddb了const IWidth = 300*120; IHeight = 300*4;var bmp1, bmp2 : TBitmap;begin Caption := 'Creating!'; bmp1 := TBitmap.Create; try bmp1.PixelFormat := pf24bit; bmp1.Width := IWidth; bmp1.Height := IHeight; bmp2 := TBitmap.Create; try bmp2.Assign(bmp1); Caption := 'done'; finally bmp2.Free; end; finally bmp1.Free; end;end; delphi 查找问题 Tablel里存不了图片 在Edit的onkeydown事件中写一段代码,鼠标指针消失? 关于时间类型的问题,谢谢大家帮忙。 建有一QQ群2044725.为Delphi志同道合的朋友提供个交流空间,有兴趣的可以进来交流,此群为永久固定群,还有15个空位 关于 soap / web server 服务返回数据类型的问题 如何在ListView中快速填入数据??? 小2,上茶~~翠花,酸菜~~ 如何在activeform里面,关闭包含它的ie程序? 再问一下关于这个窗体继承的问题 谁在用cnpack,里面的dhibernate部分怎么用? 类的问题:祖先类兼容后代类
对于大图片,可以用分块显示办法解决。
aBitmap.Width :=100;
aBitmap.Height :=100;
aBitmap.Canvas.CopyRect(Rect(0,0,100,100),Image1.Canvas,Rect(100,100,200,200));
上面代码是显示区域为(100,100,200,200)的图像
IWidth = 1024*20;
IHeight = 1024*20;
var
bmp1, bmp2 : TBitmap;
begin
Caption := 'creating!';
bmp1 := TBitmap.Create;
try
bmp1.PixelFormat := pf24bit;
bmp1.Width := IWidth;
bmp1.Height := IHeight;
bmp2 := TBitmap.Create;
try
bmp2.Assign(bmp1);
Caption := 'done';
finally
bmp2.Free;
end;
finally
bmp1.Free;
end;
end;
还有,如果分区域显示的话,TPicture对象加载的影像太大的话会不会出现该错误?
长3米,宽呢?打算用多少位色来保存?
扫描的时候采用的彩色(24位),分辨率为300DPI,保存的格式为JPEG
IWidth = 300*120;
IHeight = 300*4;
var
bmp1, bmp2 : TBitmap;
begin
Caption := 'Creating!';
bmp1 := TBitmap.Create;
try
bmp1.PixelFormat := pf24bit;
bmp1.Width := IWidth;
bmp1.Height := IHeight;
bmp2 := TBitmap.Create;
try
bmp2.Assign(bmp1);
Caption := 'done';
finally
bmp2.Free;
end;
finally
bmp1.Free;
end;
end;