मैं देख रहा हूँ कि यदि संभव हो तो SDL.NET में 8-बिट सतह का पैलेट प्राप्त करें, या (संभावना से अधिक) 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-बिट सतह से कैसे प्राप्त किया जाए, चाहे वह सुरक्षित या असुरक्षित कोड के माध्यम से हो, तो मदद की बहुत सराहना की जाएगी।