win32api: obtenir la palette bitmap
Question
Je fais essentiellement cette mais pour 8 bits . Je peux obtenir les bits bitmap en utilisant correctement « P » comme le bit de mode. Cependant, j'ai tous ces bits bitmap, mais pas la palette - PIL utilise juste une palette par défaut de gris. Comment puis-je obtenir la palette correcte de l'image?
La solution 2
Cela fonctionne, le retour d'une palette compatible PIL:
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
Autres conseils
Je ne sais pas comment convertir l'API Windows remet en Python, et je ne sais comment mettre à jour une palette dans PIL, mais voilà.
bitmaps Windows ne sont pas une palette de couleurs qui leur sont rattachés. La palette est sélectionnée dans le DC et a fusionné avec les couleurs du système réservés; l'image bitmap est alors affichée à l'aide de la palette sélectionnée.
Si vous avez le DC, vous pouvez obtenir la palette actuellement réalisée en utilisant GetSystemPaletteEntries .