Я хочу шукати, якщо можливо, палітру 8-бітної поверхні в SDL.NET або (більш ніж ймовірно) за допомогою Tao.SDL. Це тому, що я хочу зайнятися заміною палітри безпосередньо на палітрі, замість того, щоб блимати поверхні разом, щоб замінити кольори на зразок того, як ви це зробите з 32-бітовою поверхнею.
Я отримав SDL_Surface і SDL_PixelFormat, однак, коли я йду, щоб отримати палітру таким же чином, я отримую System.ExecutionEngineException:
private Tao.Sdl.Sdl.SDL_Palette GetPalette(Surface surf)
{
// Get surface.
Tao.Sdl.Sdl.SDL_Surface sdlSurface = (Tao.Sdl.Sdl.SDL_Surface)System.Runtime.InteropServices.Marshal.PtrToStructure(surf.Handle,
typeof(Tao.Sdl.Sdl.SDL_Surface));
// Get pixel format.
Tao.Sdl.Sdl.SDL_PixelFormat pixelFormat = (Tao.Sdl.Sdl.SDL_PixelFormat)System.Runtime.InteropServices.Marshal.PtrToStructure(sdlSurface.format,
typeof(Tao.Sdl.Sdl.SDL_PixelFormat));
// Execution exception here.
Tao.Sdl.Sdl.SDL_Palette palette = (Tao.Sdl.Sdl.SDL_Palette)System.Runtime.InteropServices.Marshal.PtrToStructure(pixelFormat.palette,
typeof(Tao.Sdl.Sdl.SDL_Palette));
return palette;
}
Коли я використовував небезпечний код для отримання палітри, я отримав помилку часу компіляції: "Неможливо взяти адресу, отримати розмір або оголосити вказівник на керований тип (" Tao.Sdl.Sdl.SDL_Palette ') ".
Мій небезпечний код для отримання палітри:
unsafe
{
Tao.Sdl.Sdl.SDL_Palette* pal = (Tao.Sdl.Sdl.SDL_Palette*)pixelFormat.palette;
}
З того, що я прочитав, керований тип у цьому випадку - це коли структура має якесь посилання всередині неї як поле. Структура SDL_Palette має масив SDL_Color, тому я припускаю, що саме цей тип посилань викликає проблеми. Однак я все ще не впевнений, як обійти це, щоб отримати базову палітру.
Тож якщо хтось знає, як отримати палітру з 8-бітної поверхні, будь то безпечний чи небезпечний код, допомогу буде дуже вдячний.