SDL.NET/Tao.SDL- এ আমি 8-বিট পৃষ্ঠের প্যালেটটি কীভাবে পেতে পারি?


11

আমি SDL.NET- এ 8-বিট পৃষ্ঠের প্যালেটটি সম্ভব হলে বা Tao.SDL ব্যবহার করে (সম্ভবত আরও বেশি) পেতে চাইছি। এটি কারণ আপনি প্যালেটটি সরাসরি প্যালেটটির সাথে অদলবদল করতে চান, পৃষ্ঠগুলি একসাথে ব্লিটিংয়ের পরিবর্তে রঙগুলি প্রতিস্থাপন করার জন্য আপনি কীভাবে এটি 32-বিট পৃষ্ঠের সাহায্যে করবেন।

আমি এসডিএল_সর্ফেস এবং এসডিএল_পিক্সেল ফর্ম্যাটটি পেয়েছি, তবে আমি যখন একইভাবে প্যালেট পেতে যাই তখন আমি একটি সিস্টেম পাই x

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;
}

আমি যা পড়েছি তা থেকে এই ক্ষেত্রে একটি পরিচালিত প্রকারটি হ'ল যখন কোনও কাঠামোর ক্ষেত্র হিসাবে তার ভিতরে কিছু প্রকার রেফারেন্স থাকে। এসডিএল_প্লেট কাঠামোতে এসডিএল_ক্লোরগুলির একটি অ্যারে রয়েছে, তাই আমি ধরে নিচ্ছি যে এটিই সেই প্রকারের প্রকার যা সমস্যা সৃষ্টি করছে। তবে আমি এখনও নিশ্চিত নই যে অন্তর্নিহিত প্যালেটটি পেতে কীভাবে এটিকে ঘিরে কাজ করা যায়।

সুতরাং কেউ যদি 8-বিট পৃষ্ঠ থেকে প্যালেটটি কীভাবে পেতে চান, তা নিরাপদ বা অনিরাপদ কোডের মাধ্যমেই হোক না কেন, সাহায্যের প্রশংসা করা হবে।

c#  image  palette 

উত্তর:


1

হতে পারে এটি আপনাকে সহায়তা করতে পারে:

http://www.libsdl.org/docs/html/sdlsurface.html

ডকুমেন্টেশনে, স্ট্রাক্ট এসডিএল_স্ফেসের একটি বৈশিষ্ট্যযুক্ত এসডিএল_পিক্সেল ফর্ম্যাট * ফর্ম্যাট রয়েছে। এবং স্ট্রাক্ট এসডিএল_পিক্সেল ফর্ম্যাটে একটি বৈশিষ্ট্য এসডিএল_প্লেট * প্যালেট রয়েছে। আমি মনে করি আপনার কেবল এটি করা দরকার:

SDL_Surface* targetSurface;
SDL_Palette* myPalette = targetSurface->format->palette; 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.