Как сделать так, чтобы мы получили изображение без потерь

Я пытаюсь написать код, который получает изображения (PNG, JPG, BMP, ETC') и поворачивает изображение. Я хочу обрезать изображение без потери информации (без изменений в интерполяции), поэтому я использую

        Bitmap target = new Bitmap(cropRect.Width, cropRect.Height);
        using (Graphics g = Graphics.FromImage(target))
        {
            g.DrawImage(img, new Rectangle(0, 0, target.Width, target.Height),
                             cropRect,
                             GraphicsUnit.Pixel);
        }

где цель - обрезанное изображение. img - исходное изображение, а cropRect - прямоугольник обрезки, который я хочу обрезать. Поскольку я поддерживаю размер изображения (без увеличения), не должно быть никакой потери информации.

После этого я поворачиваю изображение, используя

        target.RotateFlip(RotateFlipType.Rotate90FlipNone);

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

1 ответ

Вы могли бы использовать DrawImageUnscaled/DrawImageUnscaledAndClipped чтобы быть абсолютно уверенным, что это не делает ничего прикольного, хотя я сомневаюсь, что так или иначе будет в вашем случае. И так как это 90 градусов и / или переворот, RotateFlip не должно ухудшать изображение.

Однако если вы сохраните изображение в формате без потерь, вы наверняка потеряете некоторую информацию.

Другие вопросы по тегам