Слияние 2 прозрачных изображений в Picturebox - PullRequest
0 голосов
/ 17 января 2011

Я пытаюсь использовать GDI + для объединения двух PNG с прозрачностью, которые я сохранил в ImageList, а затем показать это в PictureBox. Размер моего PictureBox, первый размер изображения и второй размер изображения одинаковы. Я думал, что это будет просто, но следующий код не работает, и я не уверен, почему. Я искал, но не смог найти ни одного фрагмента кода, конкретно касающегося PictureBoxes.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    PictureBox1.Image = Nothing
    Dim myGraphic As Graphics = PictureBox1.CreateGraphics
    myGraphic.DrawImageUnscaled(ImageList1.Images(0), 0, 0)
    myGraphic.DrawImageUnscaled(ImageList1.Images(1), 0, 0)        
End Sub

Кто-нибудь знает, что мне не хватает? В тот момент, когда я нажимаю кнопку, я вижу мерцание PictureBox с изображением в течение доли секунды.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 17 января 2011

Ааа, теперь я понимаю, что я сделал неправильно.

Вот мой исправленный код.Проблема решена.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim newimage As New Bitmap(ImageList1.Images(0).Width, ImageList1.Images(0).Height)
        Dim g As Graphics = Graphics.FromImage(newimage)
        g.DrawImage(ImageList1.Images(0), 0, 0)
        g.DrawImage(ImageList1.Images(1), 0, 0)
        PictureBox1.Image = newimage
        g.Dispose()    
End Sub
0 голосов
/ 17 января 2011

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

Тем не менее, недостаточно просто рисовать на графике. Вы также должны аннулировать элемент управления Picture Box. Это заставит его перерисовать себя.

Как грубый тест для вашей текущей программы, вы можете минимизировать его, а затем максимизировать и посмотреть, есть ли PNG. Это также заставит перерисовать окно рисунка.

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