Win32API: Получить растровую палитру
Вопрос
Я в основном делаю это Но для 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..