这个图像裁剪器出了什么问题?

时间:2010-12-14 05:08:13

标签: c# image-processing

我正在制作一个用于图像的裁剪工具,我不能为我的生活弄清楚为什么它会产生它正在制作的图像......

我正在按照接受的答案here,但它仍然很奇怪......这是我的代码:

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);
}

请帮帮我。我附上了我正在获得的图片...... alt text

更新

对于@Aaronontheweb,这是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文档中给出的名称具有欺骗性。例如,文档将输出图像称为 source ,将输入图像称为 display 。也许应该更新API以获得更好的命名?

1 个答案:

答案 0 :(得分:3)

在以下行中:

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);

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

Graphics.DrawImage(Source,new Rectangle(new Point(0,0),new Size(Crop.Width,Crop.Height)),new Rectangle(new Point(0,0),new Size(Target.Width) ,Target.Height)),GraphicsUnit.Pixel);