如何在SDL.NET/Tao.SDL中获得8位表面的调色板?
我希望在可能的情况下或(更可能是)使用Tao.SDL在SDL.NET中获得8位表面的调色板。这是因为我想直接与调色板进行调色板交换,而不是像将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位表面获取调色板,无论是通过安全代码还是不安全代码,都将不胜感激。