Varolan bitmap'e bir metin çizmeye çalışıyorum ancak Graphics Context'in DrawText yöntemini kullandığımda arka plan kaldırılır. Ancak bu, yalnızca boş bitmap'ten arka plan görüntüsü oluşturduğumda (yüklenen görüntülerden Bitmap'te DrawText kullanarak) iyi olur. Sanırım boş bir bitmap oluşturmak için MemoryDC kullanıyorum, ancak wxPython için oldukça yeniyim, bu yüzden bu sorunu düzeltmek için hiçbir fikrim yok çünkü sorun olur.wxPython - GC.DrawText arka plan bitmap'ini kaldırır
İşte ben bugüne kadar yaptığım budur:
import wx
def GetEmptyBitmap(w, h, color=(0,0,0)):
"""
Create monochromatic bitmap with desired background color.
Default is black
"""
b = wx.EmptyBitmap(w, h)
dc = wx.MemoryDC(b)
dc.SetBrush(wx.Brush(color))
dc.DrawRectangle(0, 0, w, h)
return b
def drawTextOverBitmap(bitmap, text='', fontcolor=(255, 255, 255)):
"""
Places text on the center of bitmap and returns modified bitmap.
Fontcolor can be set as well (white default)
"""
dc = wx.MemoryDC(bitmap)
gc = wx.GraphicsContext.Create(dc)
font = wx.Font(16, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
gc.SetFont(font, fontcolor)
w,h = dc.GetSize()
tw, th = dc.GetTextExtent(text)
gc.DrawText(text, (w - tw)/2, (h - th)/2)
return bitmap
app = wx.App()
bmp_from_img = bmp = wx.Image(location).Rescale(200, 100).ConvertToBitmap()
bmp_from_img = drawTextOverBitmap(bmp_from_img, "From Image", (255,255,255))
bmp_from_empty = GetEmptyBitmap(200, 100, (255,0,0))
bmp_from_empty = drawTextOverBitmap(bmp_from_empty, "From Empty", (255,255,255))
frame = wx.Frame(None)
st1 = wx.StaticBitmap(frame, -1, bmp_from_img, (0,0), (200,100))
st2 = wx.StaticBitmap(frame, -1, bmp_from_empty, (0, 100), (200, 100))
frame.Show()
app.MainLoop()
Dediğim gibi yüklü bir görüntü düzgün görüntülenir ancak EmptyBitmap ile oluşturulan bir hiç bir geçmişe sahiptir kullanır StaticBitmap.
Nasıl çalışacağına dair herhangi bir fikriniz var mı?
Teşekkür ederiz
Teşekkürler, bu aslında sorunu çözdü. Çözümü aradığımda, buna alfa sıfıra sıfırlamadan kaynaklanabileceği söylendi. –
Ben alfa ile bir şey yapmak zorunda olduğunu kanıtlamak mümkün değildi, ama aslında sorun gibi görünüyor. Aşağıdakileri deneyin: '' b = wx.EmptyBitmapRGBA (w, h, * color, alpha = 255) '', 'img = b.ConvertToImage()' ',' b = img.ConvertToBitmap() ''. '' Wx.Image'' üzerinde ileri geri gidip alfa kanalını döker ve sonra çalışır. – nepix32
[Tim Roberts, google gruplarında wxPython kullanıcıları] (https://groups.google.com/forum/#!topic/wxpython-users/huyH0pKklks) aynı şeyi buldu: Alfa kanalı olmayan bitmap'e sahip olmak, iş. – nepix32