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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top