Win32API: Holen Sie sich Bitmap -Palette
Frage
Ich mache im Grunde genommen Dies Aber für 8-Bit. Ich kann die Bitmap -Bits mit "P" als Modus bit richtig abrufen. Ich habe jedoch all diese Bitmap -Bits, aber keine Palette - PIL verwendet nur eine standardmäßige graue Palette. Wie bekomme ich die richtige Palette aus dem Bild?
Lösung 2
Dies funktioniert und gibt eine pilkompatible Palette zurück:
import ctypes, win32gui
def getSystemPalette():
hwnd = win32gui.GetDesktopWindow()
hwndDC = win32gui.GetWindowDC(hwnd)
buff = ctypes.c_buffer("0"*(256*4)) #R, G, B, and flags
ctypes.windll.gdi32.GetSystemPaletteEntries(hwndDC, 0, 256, buff)
win32gui.ReleaseDC(hwnd, hwndDC)
#ignore every 4th entry which is the flags
res = [ord(x) for i,x in enumerate(buff) if i%4 != 3]
return res
Andere Tipps
Ich bin mir nicht sicher, wie ich Windows -API -Anrufe in Python konvertieren soll, und ich weiß auch nicht, wie man eine Palette in PIL aktualisiert, aber hier geht es.
Windows -Bitmaps haben keine Farbpalette an ihnen. Die Palette wird in den DC ausgewählt und mit den reservierten Systemfarben zusammengeführt. Die Bitmap wird dann mit der aktuell ausgewählten Palette angezeigt.
Wenn Sie den DC haben GetSystempaletteEntries.