Вопрос

Я в основном делаю это Но для 8-битной. Я могу правильно получить биты растровых изображений, используя «p» в качестве бита в режиме. Тем не менее, у меня есть все эти биты битов, но без палитры - PIL просто использует палитру по умолчанию. Как мне получить правильную палитру из изображения?

Это было полезно?

Решение 2

Это работает, возвращая 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

Другие советы

Я не уверен, как преобразовать вызовы Windows API в Python, и не знаю, как обновить палитру в Pil, но вот идет.

Ратушки Windows не имеют прикрепленной к ним цветовую палитру. Палитра выбирается в постоянный ток и объединились с зарезервированными цветами системы; Затем растровое изображение отображается с использованием текущей выбранной палитры.

Если у вас есть DC, вы можете получить текущую реализующую палитру, используя Getsystempaleteteentries..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top