Искажение изображения после поворота - PullRequest
0 голосов
/ 12 апреля 2019

Я вращаю QR-код, используя следующий код:

private static Image RotateImage(Image image, float angle)
    {
        float height = image.Height;
        float width = image.Width;
        int hypotenuse = System.Convert.ToInt32(System.Math.Floor(Math.Sqrt(height * height + width * width)));
        Bitmap rotatedImage = new Bitmap(hypotenuse, hypotenuse);
        using (Graphics g = Graphics.FromImage(rotatedImage))
        {
            g.TranslateTransform((float)rotatedImage.Width / 2, (float)rotatedImage.Height / 2); //set the rotation point as the center into the matrix
            g.RotateTransform(angle); //rotate
            g.TranslateTransform(-(float)rotatedImage.Width / 2, -(float)rotatedImage.Height / 2); //restore rotation point into the matrix
            g.DrawImage(image, (hypotenuse - width) / 2, (hypotenuse - height) / 2, width, height);
        }
        return rotatedImage;
    }

Затем я рисую этот повернутый QR-код на простой белой прямоугольной области (области по бокам отQR-код в изображении).Когда я пытаюсь прочитать повернутый QR-код с помощью библиотеки ZXing Reader, он не декодирует изображение (если поворот не кратен 90).Я подумал, что это может быть связано с искажением изображения после поворота.Когда я увеличиваю повернутое изображение, на изображении появляются очень светлые видимые серые участки, и изображение кажется совмещенным (имеет эффект лестницы).Есть ли способ исправить это искажение?

Вот пример изображения, повернутого на -80 градусов: enter image description here

Вот какизображение выглядит увеличенным: enter image description here

1 Ответ

0 голосов
/ 12 апреля 2019

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

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

...