【问题标题】:Extract small portion of image without loading all of it [closed]提取图像的一小部分而不加载所有图像[关闭]
【发布时间】:2014-01-29 06:16:37
【问题描述】:

我有大的 JPG 图片(比如 20000x10000 像素),想从这些图片中提取子图片而不加载整个图片。

我发现可以使用这个 ImageMagick 命令:

convert -extract 226x248+4216+3377 a.jpg o.jpg

但我需要在我的 C# WPF 应用程序中使用它。

Magick.NET 没有实现提取方法。

是否有任何用于此的 .NET 库?或者至少是一个简单的 exe,无需在客户端机器上安装像 ImageMagick 这样的大库即可复制。

【问题讨论】:

  • 提取子图像是解决问题还是问题本身?如果您需要缩略图(例如),那么您可以在创建大图像的同时生成它们。或者子图像的目的是什么?
  • 大图不是我自己生成的,我只是将它们导入到我的应用程序中,添加后需要随机裁剪。
  • 随机作物有多少?它们是用来做什么的?导入过程有什么用?您的软件对大图像和裁剪图像做了什么?我仍在考虑某种缩略图(生成一次然后使用),通过 slowmemory 消耗 import once 运行绝对可以,生成一次(这意味着,加载整个图像,照常进行)。

标签: c# .net wpf imagemagick jpeg


【解决方案1】:

Magick.NET 确实支持提取子图像。您应该使用 Crop 方法:

using(MagickImage image = new MagickImage("a.jpg"))
{
  image.Crop(new MagickGeometry(226,248,4216,3377));
  image.Write("o,jpg");
}

ImageMagick 的 -extract 选项将在裁剪出您需要的部分之前读取整个 jpg。所以也许这不是你的问题的解决方案。仅对于一小部分格式,图像不会被完全读取。

【讨论】:

  • 它是加载整个图像 a.jpg 还是只加载它需要的部分?
【解决方案2】:

我不知道有任何 c# 库可以做到这一点。不过,http://www.gdal.org 的 Gdal 可以做到。它也有 c# 包装器,不过可能有点笨重。

【讨论】:

  • 正如你所说,它太笨重了,谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2013-04-24
  • 2013-03-25
  • 2010-10-11
  • 2020-05-01
  • 2020-10-08
  • 1970-01-01
相关资源
最近更新 更多