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?

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top