如何使用带有WebImage类的C#裁剪图像?

时间:2018-11-19 18:47:25

标签: c# jcrop webimage

我在ASP.NET MVC 5框架的顶部有一个使用C#编写的应用程序。

我正在尝试使用WebImage裁剪磁盘上的图像。在GUI上,我正在使用Jcrop插件来允许用户标记要裁剪的区域。如您所见,Jcrop插件为我提供了X1,X2,Y1和Y2,它们标识了要保留的最终图像的位置。 Jcrop还为我提供了最终图像的最终高度和宽度,即使它们也可以使用以下公式W = X2 - X1进行计算; H = Y2 - Y1

enter image description here

这是我裁剪给定图像并覆盖它的方法。

/// <summary>
/// Crop the given image and overrides it with the cropped image
/// </summary>
/// <param name="filename">The full path of the image and the location of the new image</param>
/// <param name="top">Y or Y1</param>
/// <param name="left">X or X1</param>
/// <param name="bottom">Y2</param>
/// <param name="right">X2</param>
/// <returns></returns>
public WebImage CropAndSave(string sourcePath, int top, int left, int bottom, int right)
{
    byte[] imageBytes = File.ReadAllBytes(sourcePath);

    var image = new WebImage(imageBytes)
    {
        FileName = ExtractFileName(sourcePath)
    };

    WebImage croppedImage = image.Crop(top, left, bottom, right);
    croppedImage.Save(sourcePath, "jpg", true);

    return croppedImage;
}

但是,裁剪的图像不是我期望的。这是一个很小的图像,与用户想要保留的图像不同。

如何使用WebImage.Crop(...)正确裁剪图像?

2 个答案:

答案 0 :(得分:2)

阅读您提供的public int[][] copyPuzzle(int[][] puzzle) { int[][] res = new int[puzzle.length][puzzle[0].length]; for(int i = 0; i < puzzle.length; i++) { for(int j = 0; j < puzzle.length; j++) { res[i][j] = puzzle[i][j]; } } return res; } public ArrayList<State> generate() { ArrayList<State> successors = new ArrayList<State>(); for(int i = 0; i < puzzle.length; i++) { for(int j = 0; j < puzzle[i].length; j++) { for(int k = 0; k < puzzle[i].length; k++) { if(puzzle[i][j] != puzzle[i][k] && puzzle[i][j] <= 0 && puzzle[i][k] <= 0) { int[][] newPuzzle = copyPuzzle(puzzle); int temp = newPuzzle[i][j]; newPuzzle[i][j] = newPuzzle[i][k]; newPuzzle[i][k] = temp; State state = new State(newPuzzle); successors.add(state); } } } } return successors; } 的定义是期望得到以下结果;

  • 要从顶部 Y1
  • 删除的像素数
  • 要从左侧 X1
  • 删除的像素数
  • 原始高度减去Y2的全高度
  • 原始负X2的全宽度

    Crop

答案 1 :(得分:2)

根据WebImage

的定义
  

顶部:要从顶部移除的像素数。

     

:要从左侧删除的像素数。

     

底部:要从底部移除的像素数。

     

:要从右侧删除的像素数。

您需要提供要删除的像素数,而不是要保持的像素数。

尝试将您对LR: 0.000000 (0.000000) KNN: 0.000000 (0.000000) CART: 0.000000 (0.000000) NB: 0.000000 (0.000000) SVM: 0.000000 (0.000000) 的呼叫更改为以下内容

Corp()

WebImage croppedImage = image.Crop(top, left, image.Height - bottom, image.Width - right); 会给我从底部去除的像素数,image.Height - bottom会给我从右边去除的像素数。