বেসিক সি/চিত্র
SDL এ, ছবিগুলি তথাকথিত আকারে প্রদর্শিত হয় পৃষ্ঠ বা টেক্সচার। বেসিক সি-তে, পৃষ্ঠতলগুলি খুব কমই ব্যবহার করা হয় কারণ তাদের কোনও হার্ডওয়্যার সমর্থন নেই, তাই সাধারণত একটি চিত্র (Img) একটি টেক্সচার - SDL_Texture-এর একটি পয়েন্টার যা একটি ভেরিয়েবলের জন্য নির্ধারিত হয় (ঘোষণায় পরিবর্তনশীল নামটি * এর আগে থাকে)। < br>
প্রদর্শিত ছবি প্রজেক্টরে (রেন্ডারার) তৈরি করা হয় যেমন পয়েন্ট অঙ্কন, লাইন বা ছবি সন্নিবেশ (কপি) করে। পর্দায় প্রদর্শিত (উইন্ডোতে) ShowPage কমান্ড অনুসরণ করে। আপনি টার্গেট কমান্ডের সাহায্যে ছবি (টার্গেট) তৈরির লক্ষ্য পরিবর্তন করতে পারেন এবং এর বিষয়বস্তু পরিবর্তন করে নির্বাচিত চিত্র (টেক্সচার) আঁকতে পারেন। আপনি প্রদত্ত মাত্রা সহ একটি নতুন চিত্র তৈরি করতে পারেন, এটি পরিষ্কার করতে এবং ভার্চুয়াল স্ক্রিনের মতো এটিতে আঁকতে পারেন। ছবির বিষয়বস্তু প্রদর্শন করতে, টার্গেট (NULL) কমান্ডের সাহায্যে প্রজেক্টরটিকে লক্ষ্য হিসাবে পুনরুদ্ধার করুন, এতে চিত্রটি প্রবেশ করান এবং ShowPage কল করুন৷
টেক্সচার অ্যাক্সেস মোড:
SDL_TEXTUREACCESS_STATIC বিরল বিষয়বস্তুর পরিবর্তন, আনব্লক করা যায় না
SDL_TEXTUREACCESS_STREAMING ঘন ঘন কন্টেন্ট পরিবর্তন, ব্লকযোগ্য
SDL_TEXTUREACCESS_TARGET গ্রাফিক্স তৈরির জন্য টার্গেট টেক্সচার হিসাবে ব্যবহার করা যেতে পারে
যদি সম্ভব হয়, স্ট্যাটিক মোড ব্যবহার করুন, অন্যান্য মোডগুলি বিস্ময়ের কারণ হতে পারে, যেমন TARGET মোডে থাকা ছবিগুলি উইন্ডোর আকার পরিবর্তনের ফলে মুছে ফেলা হতে পারে৷
ColorKey(surface,R,G,B)
সম্পাদনাপৃষ্ঠ সম্পূর্ণরূপে স্বচ্ছ হওয়ার জন্য RGB উপাদানগুলির সাথে রঙ সেট করে। পৃষ্ঠ হল SDL_Surface টাইপের একটি কাঠামো। SDL_SetColorKey (সারফেস, 1, SDL_MapRGB (সারফেস-> ফর্ম্যাট, R, G, B)) চালায়;
CopyImg (T1, X, Y, W, H, T2)
সম্পাদনাT1 ইমেজের একটি খণ্ড কপি করে, অবস্থান X, Y এবং ডাইমেনশন W, H থেকে, TARGET মোডে এটি থেকে একটি T2 ইমেজ তৈরি করে। ইমেজ (টেক্সচার) T2 এর দিকে নির্দেশিত ভেরিয়েবলটি অবশ্যই আগে ঘোষণা করা উচিত (SDL_Texture * T2 = NULL;)। নিম্নলিখিত পদক্ষেপগুলি ঠিক সঞ্চালিত হয়:
- যদি (T2) SDL_DestroyTexture (T2); T2 মুছে ফেলুন যদি এটি বিদ্যমান থাকে
- T2 = SDL_CreateTexture (SDLRenderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_TARGET, W, H); একটি নতুন T2 ইমেজ তৈরি করুন
- SDL_SetRenderTarget (SDLRenderer, T2); T2 এ "লক্ষ্য" সেট করা
- SDL_SetRenderDrawColor (SDLRenderer, 0,0,0,0); একটি কালো রং নির্বাচন
- SDL_RenderClear (SDLRenderer); কালো রঙে T2 ভরাট
- SRC.x = X; SRC.y = Y; SRC.w = W; SRC.h = H; SDL_RenderCopy (SDLRenderer, T1, & SRC, NULL); টুকরো T1 থেকে T2 অনুলিপি করা হচ্ছে
- SDL_SetRenderTarget (SDLRenderer, NULL); প্রজেক্টরের জন্য লক্ষ্য নির্ধারণ করা
CreateImg (T, w, h)
সম্পাদনাটার্গেট মোডে একটি নতুন ইমেজ তৈরি করা w, h ভেরিয়েবল টি-তে বরাদ্দ করা মাত্রা সহ যা অবশ্যই ঘোষণা করতে হবে। T = SDL_CreateTexture (SDLRenderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_TARGET, w, h);
CreateImgBitmap (T, P, w, h)
সম্পাদনাW, h, ভেরিয়েবল টি-তে বরাদ্দ করা মাত্রা সহ একটি নতুন চিত্র তৈরি করা, P দ্বারা নির্দেশিত ঠিকানায় মেমরি থেকে ডেটা দিয়ে ভরা। {T = SDL_CreateTexture (SDLRenderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_STATIC, w, h_dtture); * 4);}
DeleteImg (T)
সম্পাদনাT চিত্র মুছে দেয়। {SDL_DestroyTexture (T); T = NULL;} সম্পাদন করে
GetBitmap (X, Y, W, H, pixels)
সম্পাদনাপিক্সেল দ্বারা নির্দেশিত ঠিকানা থেকে মেমরিতে X, Y এবং ডাইমেনশন W, H থেকে টার্গেট থেকে ছবির একটি অংশ কপি করে। {SRC.x = X; SRC.y = Y; SRC.w = W; SRC.h = H; SDL_RenderReadPixels (SDLRenderer, & SRC, SDL_PIXELFORMAT_RGBA32, পিক্সেল, W * 4);}
কিছু সিস্টেমে, যেমন Android, এটি একটি মারাত্মক ত্রুটির কারণ হতে পারে৷
GetImg (X, Y, W, H, T)
সম্পাদনাটার্গেট থেকে ইমেজের একটি অংশ X, Y এবং ডাইমেনশন W, H থেকে টেক্সচার T থেকে কপি করে। GetBitmap কে একটি অস্থায়ী বাফারে কল করে, তারপর ImgBitmap। T যদি NULL-এর দিকে নির্দেশ করে তাহলে T-এর জন্য একটি নতুন ছবি তৈরি করা হয়।
ImgBitmap (T, P, W)
সম্পাদনাP দ্বারা নির্দেশিত মেমরির ডেটা দিয়ে ইমেজ T পূরণ করে। W হল লাইনে পিক্সেলের সংখ্যা (ছবির প্রস্থ)। SDL_UpdateTexture (T, NULL, P, w * 4) চালায়;
InvertImg (S, T)
সম্পাদনাTARGET মোডে উল্টানো রং সহ চিত্র (টেক্সচার) S থেকে T অনুলিপি করে। টেক্সচার অবশ্যই ঘোষণা করতে হবে।
মনোযোগ! উপরন্তু, এটি কারণ:
- S টেক্সচার কালার ব্লেন্ডিং মোড পরিবর্তন করুন
- প্রজেক্টরের লক্ষ্য নির্ধারণ করা
- অঙ্কনের রঙ সাদাতে পরিবর্তন করুন
InvertImgBitmap (T, pixels, W, H)
সম্পাদনাImgBitmap এর মত, কিন্তু একটি নতুন W, H ছবি তৈরি করা হয়েছে, রংগুলি উল্টানো (নেতিবাচক) এবং চিত্রটি স্ট্রিমিং মোডে রয়েছে।
InvertImgSurface (S, T)
সম্পাদনাএকটি নেতিবাচক তৈরি করতে স্ট্রিমিং মোডে টেক্সচার T-এ উল্টানো রঙে পৃষ্ঠ S কপি করে। সঠিকভাবে সম্পাদন করে:
- SDL_Surface * CS = SDL_ConvertSurfaceFormat (S, SDL_PIXELFORMAT_RGBA32,0); একটি CS পৃষ্ঠ তৈরি করে যাতে RGBA32 রঙ বিন্যাসের সাথে S কপি থাকে
- SDL_DestroyTexture (* T); T টেক্সচার সরিয়ে দেয়
- * T = SDL_CreateTexture (SDLRenderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_STREAMING, CS-> w, CS-> h); পৃষ্ঠ S এর মাত্রা সহ একটি টেক্সচার T তৈরি করে
- SDL_LockTexture (* T, NULL, & Pixels, & Pitch); "ব্লক" T, পিক্সেল ভেরিয়েবলে ডেটা ঠিকানা T লিখে, পিচের জন্য T লাইনে বাইটের সংখ্যা (প্রস্থ * 4)
- Uint32 * pix = (Uint32 *) পিক্সেল; একটি 4-বাইট এলাকায় একটি পিক্স পয়েন্টার তৈরি করে এবং এটি একটি পিক্সেল ঠিকানা বরাদ্দ করে
- Uint32 * spix = (Uint32 *) CS-> পিক্সেল; CS-এ স্পিক্স পয়েন্ট
- এর জন্য (int i = 0; i <CS-> w * CS-> h; ++ i) pix [i] = ~ spix [i]; প্রতিলিপি বাতিল (উল্টানো) CS থেকে T পর্যন্ত ডেটা।
- SDL_UnlockTexture (* T); টি আনলক করে
- SDL_FreeSurface (CS); CS সরিয়ে দেয়
ImgAlphaMod (টেক্সচার, আলফা)
সম্পাদনাকপির জন্য টেক্সচার ইমেজ আলফা মডুলেটর সেট করে। কপি করা (আঁকা) ছবির লক্ষ্য আলফা মান হবে: image alpha * (alpha / 255)। এটি অনুসরণ করে যে আলফা = 255 এর কোন প্রভাব নেই। SDL_SetTextureAlphaMod (টেক্সচার, আলফা) চালায়;
ImgBlendMode (টেক্সচার, ব্লেন্ড)
সম্পাদনাটেক্সচার ইমেজের মিশ্রন মোড সেট করে। SDL_SetTextureBlendMode (টেক্সচার, ব্লেন্ড) চালায়;
ImgColorMod (টেক্সচার, r, g, b)
সম্পাদনাকপি করার সময় টেক্সচার ইমেজের জন্য কালার কম্পোনেন্ট মডুলেটর সেট করে। রঙ উপাদানের লক্ষ্য মান হবে: রঙ উপাদান * (রঙ / 255), যেখানে রঙ প্রদত্ত রঙ মডুলেটর উপাদানের মান। উদাহরণস্বরূপ, সাদা রঙের একটি চিত্রের অংশগুলি মডুলেটর রঙ পাবে, কালো অংশগুলি কালো থাকবে, অন্যান্য রঙগুলি একটি মধ্যবর্তী রঙ পাবে। SDL_SetTextureColorMod কল করে (টেক্সচার, r, g, b);
ImgSDLCcolorMod (টেক্সচার, SDLCcolor)
সম্পাদনাJ. w., কিন্তু রঙটি SDL_Color টাইপের একটি পরিবর্তনশীল দ্বারা নির্দিষ্ট করা হয়েছে।
ImgSize (T)
সম্পাদনাT চিত্রের আকার পড়ে। ফলাফলটিকে SRC এবং DST ভেরিয়েবলের w এবং h ক্ষেত্রে সংরক্ষণ করে। সম্পাদন করে {SDL_QueryTexture (T, NULL, NULL, & DST.w, & DST.h); SRC.w = DST.w; SRC.h = DST.h;}
InsertImg (T)
সম্পাদনাটি-ইমেজটিকে টার্গেটে কপি করে (টার্গেট, ডিফল্টরূপে প্রজেক্টর) এর সমস্ত বিষয়বস্তু পূরণ করে। SDL_RenderCopy কল করে (SDLRenderer, T, NULL, NULL);
LoadImg (Y, N)
সম্পাদনাN. T নামের একটি ফাইল থেকে একটি T ইমেজ লোড করতে হবে। পারফর্ম করে:
- SDL_FreeSurface (SDLSsurface); SDLSurface এর বিষয়বস্তু সরিয়ে দেয়
- ifdef SDL_IMAGE_H_
SDLSsurface = IMG_Load (N); যদি SDL_image অন্তর্ভুক্ত করা হয় তাহলে ছবিটি SDLSsurface-এ লোড করুন অন্য SDLSsurface = SDL_LoadBMP (N); যদি না হয় - SDL_LoadBMP কমান্ড দিয়ে ছবিটি লোড করুন যদি শেষ
- যদি (! SDLSsurface) SDL_Log (SDL_GetError ()); যদি SDLSurface = NULL একটি বার্তা প্রিন্ট করে
- T = SDL_CreateTextureFromSurface (SDLRenderer, SDLSurface); SDLSurface থেকে একটি T টেক্সচার তৈরি করে
LoadImgKey (T, N, K)
সম্পাদনাLoadImg-এর মতো, কিন্তু একটি স্বচ্ছ কমান্ড দিয়ে K রঙও সেট করে {Color.BAS = K; SDL_SetColorKey (SDLSurface, 1, SDL_MapRGB (SDLSurface-> বিন্যাস, Color.SDL.r, Color.SDL.g, Color.SDL.b) ));}
PutImg (T, X, Y)
সম্পাদনাX, Y অবস্থানে টার্গেটের মধ্যে T চিত্র সন্নিবেশ করান। চালায় {SDL_QueryTexture (T, NULL, NULL, & DST.w, & DST.h); DST.x = X; DST.y = Y; SDL_RenderCopy (SDLRenderer, T, NULL, & DST);}
PutImgScale (T, X, Y, SW, SH)
সম্পাদনাপ্রস্থ এবং উচ্চতাকে SW এবং SH দ্বারা গুণ করে X, Y অবস্থানে টার্গেটের মধ্যে T চিত্র সন্নিবেশ করায়। এক্সিকিউট করে {SDL_QueryTexture (T, NULL, NULL, & DST.w, & DST.h); DST.x = X; DST.y = Y; DST.w * = SW; DST.h * = SH; SDL_RenderCopy (SDLRenderer) , T , NULL, & DST);}
PutImgSize (T, X, Y, W, H)
সম্পাদনাX, Y অবস্থানে টার্গেটের মধ্যে T ইমেজ সন্নিবেশ করায় এর মাত্রা পরিবর্তন করে W, H. চালায় {DST.x = X; DST.y = Y; DST.w = W; DST.h = H; SDL_RenderCopy (SDLRenderer, T, NULL, & DST);}
PutImgRect (T, S, D)
সম্পাদনাঅবস্থানে টার্গেটে S-তে নির্দেশিত T-এর চিত্র অংশ সন্নিবেশ করায় এবং D S এবং D দ্বারা নির্দেশিত মাত্রা হল SDL_Rect ভেরিয়েবল, আপনি নিজের ঘোষণা করতে পারেন বা BasicSDL দ্বারা ঘোষিত SRC এবং DST ব্যবহার করতে পারেন। SDL_RenderCopy কল করে (SDLRenderer, T, & S, & D);
PutImgRotoFlip (T, X, Y, R, F)
সম্পাদনাX অবস্থানে লক্ষ্যে একটি T চিত্র সন্নিবেশ করায়, Y কেন্দ্রে R ডিগ্রী দ্বারা ঘোরানো হয় এবং F প্রাপ্তি অনুসারে প্রতিফলিত হয়: SDL_FLIP_NONE - কোন প্রতিফলন নেই, SDL_FLIP_HORIZONTAL - অনুভূমিক প্রতিফলন, SDL_FLIP_VERTICAL - উল্লম্ব প্রতিফলন, SDL_FLIP_NONE | SDL_FLIP_VERTICAL - উল্লম্ব এবং অনুভূমিকভাবে। এক্সিকিউট করে {SDL_QueryTexture (T, NULL, NULL, & DST.w, & DST.h); DST.x = X; DST.y = Y; SDL_RenderCopyEx (SDLRenderer, T, NULL, & DST, R, NULL, F) ;}
PutImgREX (T, S, D, R, C, F)
সম্পাদনাPutImgRect এর মত, কিন্তু C এর কেন্দ্র থেকে R ডিগ্রী দ্বারা ঘোরানো হয় এবং F অনুযায়ী প্রতিফলিত হয়, যেখানে C হল একটি SDL_Point পরিবর্তনশীল। কল SDL_RenderCopyEx (SDLRenderer, T, & S, & D, R, & C, F);
SaveBMP (X, Y, W, H, N)
সম্পাদনাআমি .bmp ফরম্যাটে N নামের একটি ফাইলে X, Y পজিশন এবং W, H ডাইমেনশন থেকে টার্গেট থেকে ইমেজ ফ্র্যাগমেন্ট সংরক্ষণ করি।
Target(texture)
সম্পাদনাটেক্সচার ইমেজটিকে ডিফল্ট প্রজেক্টরের পরিবর্তে গ্রাফিক্স অপারেশনের গন্তব্য হিসাবে সেট করে, যাতে আপনি এর বিষয়বস্তু পরিবর্তন করে ছবিটি আঁকতে পারেন। টেক্সচারের জায়গায় NULL টাইপ করা প্রজেক্টরে লক্ষ্য সেট করে। SDL_SetRenderTarget কল করে (SDLRenderer, টেক্সচার);
উদাহরণ:
#include "BasicSDL.h"
Uint8 dane[200*200*4];
SDL_Texture *obraz;
SDL_Point c={100,100};
MAIN
SDLOpen(0)
Color(-255)
Circle(100,100,100)
Box(50,50,100,150)
GetBitmap(0,0,200,200,dane)
ImgBitmap(obraz,dane,200,200)
SRC(0,0,200,200) DST(300,100,300,200)
PutImgREX(obraz,SRC,DST,39,c,0)
InvertImgBitmap(obraz,dane,200,200)
PutImg(obraz,200,0)
ShowPage
WaitInKey
SDLQuit
ENDMAIN