ฉันกำลังมองหาพาเล็ตของพื้นผิว 8 บิตใน SDL.NET ถ้าเป็นไปได้หรือ (มากกว่าที่เป็นไปได้) โดยใช้ Tao.SDL นี่เป็นเพราะฉันต้องการให้ palette สลับกับ palette โดยตรงแทนที่จะเป็น blitting surface เข้าด้วยกันเพื่อแทนที่สีเหมือนที่คุณจะทำกับพื้นผิวแบบ 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 บิตไม่ว่าจะเป็นรหัสที่ปลอดภัยหรือไม่ปลอดภัยความช่วยเหลือจะได้รับการชื่นชมอย่างมาก