【发布时间】:2019-06-14 12:15:27
【问题描述】:
我有一百张 JPG 图片,想将它们合并成一个大的 JPG。 为了实现这一点,我使用以下代码:
using (var combinedBitmap = new Bitmap(combinedWidth, combinedHeights)) {
combinedBitmap.SetResolution(96, 96);
using (var g = Graphics.FromImage(combinedBitmap))
{
g.Clear(Color.White);
foreach (var imagePiece in imagePieces)
{
var imagePath = Path.Combine(slideFolderPath, imagePiece.FileName);
using (var image = Image.FromFile(imagePath))
{
var x = columnXs[imagePiece.Column];
var y = rowYs[imagePiece.Row];
g.DrawImage(image, new Point(x, y));
}
}
}
combinedBitmap.Save(combinedImagePath, ImageFormat.Jpeg);
}
一切都很好,直到尺寸(combinedWidth、combinedHeights)超过此处所说的窗帘阈值https://stackoverflow.com/a/29175905/623190
合并后的 JPG 文件大小为 23170 x 23170 像素,大小约为 50MB — 不会太大而不会占用内存。
但是不能创建更大尺寸的位图——只是由于错误的参数异常而中断。
有没有其他方法可以使用 C# 将 JPG 图像片段合并到一个尺寸大于 23170 x 23170 的大型 JPG 中?
【问题讨论】:
-
The merged JPG file with dimensions of 23170 x 23170 pixels is about 50MB — not too big to kiil the memory.磁盘大小和内存大小不一定相同。 -
mjwills — 当然 BitMap 它的内存比磁盘上压缩的 JPG 大。我想知道是否有办法直接使用 JPG? :)
-
我的意思是我的电脑有 16Gb 的 RAM,可以处理 50Mb 的文件,我猜。
-
不,我没有。是否有任何使用 WIC 的 C# 示例?
-
@Castorix 您能否分享一个 C# sn-p 如何使用 IShellImageDataFactory API 将 40,000x30000 像素大小的 jpg 加载到 .Net 的 GDI 内存中并用它做一些有意义的事情?对于仅用于未压缩图像数据的标准 24 位 RGB 图像,大约 3.4GB 的 RAM。 .NET/GDI 中断了我在 8GB Ram PC 上的测试。谢谢你。作为参考...这里是.Net Image Memory Limit stackoverflow.com/questions/29175585/…