Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';这个图像裁剪器有什么问题?_C#_Image Processing - Fatal编程技术网

C# 什么';这个图像裁剪器有什么问题?

C# 什么';这个图像裁剪器有什么问题?,c#,image-processing,C#,Image Processing,我正在制作一个图像裁剪工具,我一辈子都搞不懂为什么它会产生它正在产生的图像 我在遵循公认的答案,但它仍然很奇怪。。。这是我的密码: public void Crop( string FileName, Crop Crop) { using (Bitmap Source = ((Bitmap)Image.FromFile(FileName))) { using (Bitmap Target = new Bitmap(Crop.Width, Crop.Heig

我正在制作一个图像裁剪工具,我一辈子都搞不懂为什么它会产生它正在产生的图像

我在遵循公认的答案,但它仍然很奇怪。。。这是我的密码:

public void Crop(
    string FileName,
    Crop Crop) {
    using (Bitmap Source = ((Bitmap)Image.FromFile(FileName))) {
        using (Bitmap Target = new Bitmap(Crop.Width, Crop.Height)) {
            using (Graphics Graphics = Graphics.FromImage(Target)) {
                Graphics.DrawImage(Source, new Rectangle(new Point(Crop.Left, Crop.Top), new Size(Crop.Width, Crop.Height)), new Rectangle(new Point(0, 0), new Size(Target.Width, Target.Height)), GraphicsUnit.Pixel);
            };

            Target.Save((FileName + ".temp"), JpegCodecInfo, HighQualityEncoder);
        };
    };


    this.NormalizeFileName(FileName);
}
请帮帮我。我在附上一张我得到的图片

更新

对于@aarontheweb,这里是
Crop
类及其填充方式:

public class Crop {
    [Required]
    public short Height { get; set; }

    [Required]
    public short Left { get; set; }

    [Required]
    public short Top { get; set; }

    [Required]
    public short Width { get; set; }
}
以及填充它的jQuery:

$("#Image input:submit").bind("click", function () {
    $("#Crop\\.Height").val(Crop.height());
    $("#Crop\\.Left").val(Crop.position().left);
    $("#Crop\\.Top").val(Crop.position().top);
    $("#Crop\\.Width").val(Crop.width());
});
更新2

没关系,我知道了。问完问题后,我打了个盹,只是为了清醒一下头脑。之后,当我再次看它时,我决定切换两个矩形,看看会发生什么。你猜怎么着,这就解决了

在这一点上,我不得不说,API文档中给出的名称具有欺骗性。例如,文档将输出图像作为源,将输入图像作为显示。也许应该更新API以获得更好的命名?

在下面的行中:

Graphics.DrawImage(源、新矩形(新点(裁剪.Left、裁剪.Top)、新大小(裁剪.Width、裁剪.Height))、新矩形(新点(0,0)、新大小(目标.Width、目标.Height))、GraphicsUnit.Pixel

确保Crop.Left和Crop.Top设置为0,否则它将开始在您获得的奇怪偏移处设置像素。您也可以将其替换为以下要测试的行:


Graphics.DrawImage(源、新矩形(新点(0,0)、新大小(裁剪宽度、裁剪高度))、新矩形(新点(0,0)、新大小(目标宽度、目标高度))、GraphicsUnit.Pixel

我不确定,但我想你的矩形是倒着的。。。Drawimage(image,destRect,sourceRect,…)检查API文档…可以发布裁剪类的源代码吗?这看起来像是一个X/Y反转错误(意思是,你在.DrawImage函数调用的某个地方用Y替换了X)@Aaronntheweb,我已经用你想要的信息更新了我的帖子。我的一个项目也有类似的问题,但这里有一个奇怪的部分…这发生在用户裁剪了大约10张图片之后…用户关闭应用程序,重新打开,然后它就可以工作了…仍然在寻找解决方案。你可能想看看,GDI+部分在很多GDI任务上都有很好的Tut,包括裁剪和其他裁剪!免责声明:没有关系,我只是挖掘他的图坦卡蒙,它们是很好的参考资料。如果他使用.DrawImage,那么他可以裁剪的所有图像都是从源图像左上角开始的。偏移量是实现裁剪行为所必需的。正是我所想的,它完全挫败了裁剪图像的努力…我看到了你的观点,但第一个矩形是目标矩形,它将在目标矩形中的该点开始绘制,那么他是不是应该在第二个矩形上设置偏移量呢?你是对的,我切换了两个矩形,结果成功了,但是我不得不说,API的命名不太清楚。。。