Seite 1 von 1

wx.Bitmap Mergen

Verfasst: Mittwoch 9. März 2011, 13:48
von sabram
Hallo,

ich versuche derzeit zwei png dateien übereinander zu legen und mir ein einzelnes Bitmap object zurückgeben zu lassen.

Allerdings verliert das untere Bild seine transparent und erhält einen schwarzen Hintergrund. Mache ich irgendwas verkehrt ? =(

Hier sollte mir das gemergede Image zurückgegeben.

Code: Alles auswählen

    def mergeBitmaps(self, bmp1, bmp2):
        merged = wx.EmptyBitmap(bmp1.GetWidth(), bmp1.GetHeight())
        dc = wx.MemoryDC() 
        dc.SelectObject(merged) 
        dc.DrawBitmap(bmp1, 0, 0, True)
        dc.DrawBitmap(bmp2, 0, 0, True)
        dc.SelectObject(wx.NullBitmap)
        
        return merged
Simpler TestFrame

Code: Alles auswählen

import  wx


USE_GENERIC = 0

if USE_GENERIC:
    from wx.lib.stattext import GenStaticText as StaticText
    from wx.lib.statbmp  import GenStaticBitmap as StaticBitmap
else:
    StaticText = wx.StaticText
    StaticBitmap = wx.StaticBitmap


class TestPanel(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1)
        StaticText(self, -1, "This is a wx.StaticBitmap.", (45, 15))
        bmp = wx.Bitmap("teststep_python.png")
        StaticBitmap(self, -1, bmp, (80, 50), (bmp.GetWidth(), bmp.GetHeight()))
        bmp2 = wx.Bitmap("teststep_f.png")
        StaticBitmap(self, -1, bmp2, (80, 80), (bmp.GetWidth(), bmp.GetHeight()))
        bmp3 = self.mergeBitmaps(bmp,bmp2)
        StaticBitmap(self, -1, bmp3, (80, 120), (bmp.GetWidth(), bmp.GetHeight()))
    
    def mergeBitmaps(self, bmp1, bmp2):
        merged = wx.EmptyBitmap(bmp1.GetWidth(), bmp1.GetHeight())
        dc = wx.MemoryDC() 
        dc.SelectObject(merged) 
        dc.DrawBitmap(bmp1, 0, 0, True)
        dc.DrawBitmap(bmp2, 0, 0, True)
        dc.SelectObject(wx.NullBitmap)
        
        return merged


if __name__ == '__main__':
    import sys,os
    app = wx.App(redirect=False)
    window = TestPanel()
    window.Show()
    app.MainLoop()
Vielen Dank im vorraus

Re: wx.Bitmap Mergen

Verfasst: Sonntag 13. März 2011, 16:22
von Gremlin
Bei mir gibt das keinen schwarzen Hintergrund. Stimmt evtl. etwas mit dem Alphachannel deines Bildes nicht?

Re: wx.Bitmap Mergen

Verfasst: Donnerstag 24. März 2011, 08:34
von sabram
das ist merkwürdig...

ich hänge mal die beiden Bilder an ( es soll daraus ein neues icon erstellt werden, deshalb 16x16 )

bottom layer Bildhttp://img138.imageshack.us/img138/6276 ... python.png
top layer Bildhttp://img402.imageshack.us/img402/5317/teststepf.png

ich habe den code entsprechend angepasst sodass

Code: Alles auswählen

        merged = bmp1.GetSubBitmap(wx.Rect(0, 0, bmp1.GetWidth(), bmp1.GetHeight()))
                   #merged = wx.EmptyBitmap(bmp1.GetWidth(), bmp1.GetHeight())
ich jetzt mit GetSubBitmap arbeite, somit habe ich keinen Hintergrund mehr allerdings wird das obere Bitmap nur korrekt angezeigt, wenn es vollständig auf dem nicht transparenten Grund des anderen Bitmaps liegt. Das ergibt dann extrem hässliche Pixelfehler wenn das F wie geplant rechts von der Python schlange ist.

Hat da jemand eine Idee was ich verkehrt mache?