Domanda

Fondamentalmente lo sto facendo questo Ma per 8 bit. Posso ottenere correttamente i bit bitmap usando "p" come bit di modalità. Tuttavia, ho tutti questi bit bitmap, ma nessuna tavolozza: PIL utilizza solo una tavolozza di scala grigia predefinita. Come ottengo la tavolozza corretta dall'immagine?

È stato utile?

Soluzione 2

Funziona, restituendo una tavolozza compatibile con 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

Altri suggerimenti

Non sono sicuro di come convertire le chiamate API di Windows in Python, né so come aggiornare una tavolozza in PIL, ma qui va.

Le bitmap di Windows non hanno una tavolozza di colori collegata a loro. La tavolozza è selezionata nel DC e si fonde con i colori del sistema riservato; La bitmap viene quindi visualizzata utilizzando la tavolozza attualmente selezionata.

Se hai il DC puoi ottenere la palette attualmente realizzata utilizzando GetSystemPalettentries.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top