Pregunta

Básicamente estoy haciendo este Pero para 8 bits. Puedo obtener los bits de mapa de bits usando correctamente "P" como bit de modo. Sin embargo, tengo todos estos bits de mapa de bits, pero no hay paleta: PIL solo usa una paleta predeterminada a escala de grises. ¿Cómo obtengo la paleta correcta de la imagen?

¿Fue útil?

Solución 2

Esto funciona, devolviendo una paleta compatible 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

Otros consejos

No estoy seguro de cómo convertir las llamadas de la API de Windows en Python, ni sé cómo actualizar una paleta en PIL, pero aquí va.

Los mapas de bits de Windows no tienen una paleta de colores conectada a ellos. La paleta se selecciona en el DC y se fusiona con los colores del sistema reservado; El mapa de bits se muestra luego utilizando la paleta seleccionada actualmente.

Si tiene el DC, puede obtener la paleta actualmente realizada usando GetSystemPaletteEntries.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top