Что не так с этим изображением кроппера? - PullRequest
3 голосов
/ 14 декабря 2010

Я делаю инструмент для обрезки изображений, и я не могу понять, почему он производит изображения, которые он производит ...

Я следую принятому ответу здесь , но все еще странно ... Вот мой код:

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 Ответ

3 голосов
/ 14 декабря 2010

В следующей строке:

Graphics.DrawImage (Источник, новый прямоугольник (новая точка (Crop.Left, Crop.Top), новый размер (Crop.Width, Crop.Height)), новый прямоугольник(новая точка (0, 0), новый размер (Target.Width, Target.Height)), GraphicsUnit.Pixel);

Убедитесь, что Crop.Left и Crop.Top установлены в 0, иначеначнет устанавливать пиксели со странным смещением, которое вы получаете.Вы также можете просто заменить его следующей строкой для проверки:

Graphics.DrawImage (Источник, новый прямоугольник (новая точка (0,0), новый размер (Crop.Width, Crop.Height)), новыйПрямоугольник (новая точка (0, 0), новый размер (Target.Width, Target.Height)), GraphicsUnit.Pixel);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...