相关疑难解决方法(0)

如何在.NET中使用大位图?

我正在尝试编写一个轻量级图像查看应用程序.但是,.NET存在系统内存限制.

当尝试加载大位图(9000 x 9000 px或更大,24位)时,我得到一个System.OutOfMemoryException.这是在具有2GB RAM(其中1.3GB用完)的Windows 2000 PC上.尝试加载文件也需要很长时间.

以下代码生成此错误:

Image image = new Bitmap(filename);
using (Graphics gfx = this.CreateGraphics())
{
    gfx.DrawImage(image, new Point(0, 0));
}
Run Code Online (Sandbox Code Playgroud)

这段代码也是如此:

Stream stream = (Stream)File.OpenRead(filename);
Image image = Image.FromStream(stream, false, false);
using (Graphics gfx = this.CreateGraphics())
{
    gfx.DrawImage(image, new Rectangle(0, 0, 100, 100), 4000, 4000, 100, 100, GraphicsUnit.Pixel);
}
Run Code Online (Sandbox Code Playgroud)

此外,它就足以做到这一点:

Bitmap bitmap = new Bitmap(filename);
IntPtr handle = bitmap.GetHbitmap();
Run Code Online (Sandbox Code Playgroud)

后一个代码旨在与G​​DI一起使用.在研究这个问题时,我发现这实际上是一个内存问题,.NET试图在单个内存块中分配两倍的内存.

http://bytes.com/groups/net-c/279493-drawing-large-bitmaps

我从其他应用程序(Internet Explorer,MS Paint等)了解到,可以打开大图像,而且很快.我的问题是,如何在.NET中使用大型位图?

无论如何流式传输它们,还是非内存加载它们?

c# gdi bitmap out-of-memory

12
推荐指数
1
解决办法
1万
查看次数

C#如何在不使用大量内存的情况下裁剪图像?

可能重复:
如何裁剪巨大的图像

有询问如何裁剪图像的一个问题在这里

我读过它并使用了答案.但他们似乎都需要将图像加载到BitmapImage.

这给我带来了内存问题.因为我试图将5幅图像(8000 x 8000)裁剪成瓷砖.一次一个.

如果我错了,请纠正我,但那是8000x8000x4字节= 244 MB.每张图片.

随机我出现内存问题.

如何从另一个图像中获取1000x1000图像,同时减少内存消耗.

c# memory image-processing out-of-memory

7
推荐指数
1
解决办法
675
查看次数

如何裁剪巨幅图像

我需要在C#中处理大图像(20,000x20,000像素).由于内存限制,直接打开这些图像不是可行的方法,但我想要做的是将图像分割成更小的部分(裁剪).我一直在寻找可以解决问题的第三方库,但到目前为止还没有结果.我尝试过FreeImage和ImageMagick,但他们无法打开20,000x20x000像素的图像.我怎样才能做到这一点?

c# image crop

6
推荐指数
1
解决办法
2691
查看次数

标签 统计

c# ×3

out-of-memory ×2

bitmap ×1

crop ×1

gdi ×1

image ×1

image-processing ×1

memory ×1