TBitmap 最大可以导入多大的文件?(20分)

  • 主题发起人 主题发起人 searoom
  • 开始时间 开始时间
S

searoom

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个放大图片的程序时,出现 “存储空间不足,无法处理此命令”的错误提示
(注意哦,不是说我得机器的虚拟内存空间不足)

我觉得搞笑的是竟然出现了中文的错误提示,奇怪
 
资源分配有没有问题?图片是要占很多资源的。
先不做操作,直接做一张很大的图片放进去试试。
 
我是因为对那张图片放大的太大了,我放大1000倍
有些大一点的图片就会出现上面那种错误
(小一点的图片如果把图片再放大些也会出现这种错误)

所以我就怀疑是否是TBitmap对大小有一定的限制
 
我试着导入了一张很大的jpg图片,然后再对其进行放大

----------------------------------------------------------
说说我的放大原理先:我使用了一个函数,下面是代码:
function ZoomBMP(org:TBitmap;zooms:integer):TBitmap;
var
orgW,orgH:integer;
begin
result:=TBitmap.Create;

if org.Empty then
begin
result.Assign(nil);
exit;
end;
orgW:=org.Width;
orgH:=org.Height;
result.Width:=round(orgW*(zooms/100));
result.Height:=round(orgH*(zooms/100));
result.Canvas.CopyMode:=cmMergeCopy;
result.Canvas.StretchDraw(result.Canvas.ClipRect,org);
end;
-------------------------------------------------
大家从上面的代码可以看出,我就算对于jpg图片,我也是对他的 picture.bitmap 进行操作的
当我导入一张很大的jpg图片的时候,会出现连100%都不行 :)
 
我还是认为如果提示“存储空间不足”而且是中文提示,那因该是操作系统的提示。
要是BitMap有什么限制的话也是Window的限制,而且多半和内存空间有关系。
和TBitMap没什么关系,只不过它没有为处理超大的图而做特别处理而已。

处理超大的图形时通常会采取一些特殊方法,如 内存镜象文件、局部读取.....

不知你的问题是不是这个意思。
 
也就是说TBitmap并没有对大小做什么特别的限制?

那我应该怎么对这种特别大的jpg图片进行放大处理呢?
用我上面那种方法肯定是不行的
 
局部放大,全放大以后也不能显示阿!
 
最简单的办法(前提是已经有足够的空间读入原始图形)
就是局部放大了,
也就是只对放大后可以看到的区域进行放大显示。

如果文件已经大到无法读取,那只能用内存镜像了,
不过很麻烦,我也没用过,以前在FilpCode上见到例子,不过是C的。
 
先转换为bmp了
 
我也遇到这个头痛的问题,我是把JPG转成BMP,然后用API对BMP放大(4000*4000),再转成JPG,在保存时出现这个错误,实在是没有办法
 
多人接受答案了。
 
后退
顶部