Изображение снова рисует - PullRequest
0 голосов
/ 29 октября 2018

Итак, я работаю над проектом, и в настоящее время я нахожусь на последних штрихах в части изображения. Но тут возникает проблема. Когда я установил флажок для переворачивания изображения , оно переворачивается.

Как это: enter image description here

Но когда я нажимаю кнопку «Принять» (это для сохранения изображения в коллекцию объектов), это происходит:

enter image description here

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

Метод рисования изображения

public LayerClass ImageDrawing(LayerClass.Type img, Bitmap bm, RectangleF imgRect, String filepath, int angle, PaintEventArgs e, PointF location, bool flip)
    {
        bm = (Bitmap)Image.FromFile(filepath);
        bm = new Bitmap(bm, (int)imgRect.Width, (int)imgRect.Height);  //Scaling Image
        bm = ImageClass.GrayscaleImage(bm);             //Grayscale
        bm = MakeTransparentImage(bm);                //Transparent
        bm = RotateImage(bm, angle);
        if (flip)
            bm.RotateFlip(RotateFlipType.RotateNoneFlipX);
        e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
        e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
        e.Graphics.CompositingQuality = CompositingQuality.HighSpeed;
        imgRect.Size = new SizeF(bm.Width, bm.Height);
        e.Graphics.DrawImage(bm, imgRect.X - (bm.Width / 2), imgRect.Y - (bm.Height / 2));
        this.imageBitmap = bm;
        this.filePath = filePath;
        this.rotationAngle = angle;
        this.location = location;
        this.imageRect = imgRect;
        this.flipped = flip;
        return new LayerClass(LayerClass.Type.Image, this, filePath, imgRect, location, flip);
    }

1 Ответ

0 голосов
/ 29 октября 2018

Ваша проблема в том, что вы рисуете свое изображение на холсте, но не стираете ранее нарисованное изображение.

Подумайте об этом так: если вы рисуете что-то на листе бумаги, а затем хотите нарисовать что-то новое, но вы не используете свежий кусок, вы в итоге получаете старый рисунок под новым.

Ваш код работает так же, как и сейчас.

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

Самый простой способ сделать это - позвонить

e.Graphics.Clear(this.Background); //Use any color you want.

прежде чем позвонить

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