我在ASP.NET MVC 5框架的顶部有一个使用C#
编写的应用程序。
我正在尝试使用WebImage裁剪磁盘上的图像。在GUI上,我正在使用Jcrop插件来允许用户标记要裁剪的区域。如您所见,Jcrop插件为我提供了X1,X2,Y1和Y2,它们标识了要保留的最终图像的位置。 Jcrop还为我提供了最终图像的最终高度和宽度,即使它们也可以使用以下公式W = X2 - X1
进行计算; H = Y2 - Y1
这是我裁剪给定图像并覆盖它的方法。
/// <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(...)
正确裁剪图像?
答案 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;
}
的定义是期望得到以下结果;
原始负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
会给我从右边去除的像素数。