C# 在不加载全部图像的情况下提取图像的一小部分

C# 在不加载全部图像的情况下提取图像的一小部分,c#,.net,wpf,imagemagick,jpeg,C#,.net,Wpf,Imagemagick,Jpeg,我有大的JPG图像(比如20000x1000像素),希望在不加载整个图像的情况下从这些图像中提取子图像 我发现可以使用以下ImageMagick命令: convert -extract 226x248+4216+3377 a.jpg o.jpg 但我需要在我的C#WPF应用程序中使用它 没有实现提取方法 有没有用于此的.NET库?或者至少是一个简单的exe,不需要在客户端机器上安装像ImageMagick这样的大型库就可以复制。我不知道有哪个c#库可以做到这一点。不过,格达尔能做到。它也有c#

我有大的JPG图像(比如20000x1000像素),希望在不加载整个图像的情况下从这些图像中提取子图像

我发现可以使用以下ImageMagick命令:

convert -extract 226x248+4216+3377 a.jpg o.jpg
但我需要在我的C#WPF应用程序中使用它

没有实现提取方法


有没有用于此的.NET库?或者至少是一个简单的exe,不需要在客户端机器上安装像ImageMagick这样的大型库就可以复制。

我不知道有哪个c#库可以做到这一点。不过,格达尔能做到。它也有c#wrapper,不过仅仅为了这个目的可能会有点笨重。

我不知道有哪个c#库可以做到这一点。不过,格达尔能做到。它也有c#wrapper,但仅用于此目的可能有点笨重。

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

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

ImageMagick的-extract选项将在裁剪出所需零件之前读取整个jpg。所以这可能不是解决你问题的办法。只有一小部分格式的图像才会被完全读取。

Magick.NET支持提取子图像。您应该使用裁剪方法:

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

ImageMagick的-extract选项将在裁剪出所需零件之前读取整个jpg。所以这可能不是解决你问题的办法。仅对于一小部分格式,图像将无法完全读取。

如您所述,图像太大,谢谢。如您所述,图像太大,谢谢。提取子图像是解决问题还是解决问题本身?如果您需要缩略图(例如),那么您可以在创建大型图像的同时生成它们。或者子图像的目的是什么?大图像不是我自己生成的,我只是将它们导入我的应用程序,添加它们后我需要随机裁剪。随机裁剪是什么?它们是用来干什么的?导入过程的用途是什么?你的软件对大图像和裁剪图像做了什么?我仍然在考虑一种缩略图(生成一次,然后使用),一次运行速度慢且占用内存的导入,一次生成它们(这意味着加载整个图像,照常进行)。提取子图像是解决问题还是解决问题本身?如果您需要缩略图(例如),那么您可以在创建大型图像的同时生成它们。或者子图像的目的是什么?大图像不是我自己生成的,我只是将它们导入我的应用程序,添加它们后我需要随机裁剪。随机裁剪是什么?它们是用来干什么的?导入过程的用途是什么?你的软件对大图像和裁剪图像做了什么?我仍然在考虑一种缩略图(生成一次,然后再使用),运行一次缓慢且占用内存的导入,生成一次(这意味着,加载整个图像,像往常一样继续)完全可以.它是加载整个图像a.jpg还是只加载它需要的部分?它是加载整个图像a.jpg还是只加载它需要的部分?