是否可以逐行在C#中编写位图?我担心使用Bitmap.Save()函数在处理LARGE文件时需要太多内存..
为了澄清,我想这样做:
如何在C#中完成?
谢谢,
的Kreb
答案 0 :(得分:0)
@Mikael
看起来像这样:
int bufferSize = ((width +31) >> 5) << 2); // the width is in pixels, 1bpp,
// so I had to round up to the nearest 32 bits
byte[] buffer = new byte[bufferSize];
byte[] buffer = new byte[height * bufferSize];
for (int i = 0; i < height; i++)
{
getLine(buffer,bufferSize);
Buffer.BlockCopy(bufffer,0,bigBuffer, i*bufferSize, bufferSize);
}
unsafe
{
fixed (byte* ptr = bigBuffer)
{
using (Bitmap image = new Bitmap(width,height,bufferSize,System.Drawing.Imaging.PixelFormat.Format1bbIndexed, new IntPtr(ptr)))
{
image.SetResolution(xres,yres);
image.Save(filename,System.Drawing.Imaging.ImageFormat.Tiff);
}
}
}
我担心对于非常大的图片,bigBuffer可能会变得太大..我想改变它来逐行写入文件,而不是一次性写入..
谢谢.. :))
答案 1 :(得分:0)
我曾经写过一些保存了32kx32k像素JPEG文件的代码。我在创建,加载,查看和操作它时遇到了很多问题(Photoshop可以处理高达30kx30k的文件)。 在尝试分配之后,我放弃了整个交易并决定将大图像的一部分保存到小图像中,并编写一些知道如何在需要时“缝合”这些文件的管理器程序。
我不确定你什么时候进去,但如果是为了展示那么你可以查看DeepZoom