سلام!

جلسه ی پیش با روش ایجاد یک پنجره در SDL آشنا شدید. این جلسه می خواهیم طرز نشان دادن یک تصویر در آن پنجره را به شما نشان دهیم.

همان طور که جلسه ی پیش متوجّه شدید، می توان در یک SDL_Surface پنجره را ذخیره کرد. در این نوع از متغیر، می توان یک عکس هم ذخیره کرد. SDL برای Load کردن یک عکس با فرمت BMP یک تابع دارد با مشخّصات زیر؛

SDL_Surface *SDL_LoadBMP( const char *fileAddress );

همان طور که مشاهده می کنید، خروجی این تابع یک *SDL_Surface است، پس می توان خروجی حاصل از این تابع را در یک *SDL_Surface ریخت. اگر آدرس فایل شما چیزی مانند

"/path/to/image.bmp"

بود، آن گاه باید همین آدرس را به تابع ورودی دهید. مثل مثال زیر؛

SDL_Surface *image = SDL_LoadBMP( "/path/to/image.bmp" )

;

حالا عکس مورد نظر ما در این *SDL_Surface ذخیره شده است. برای این که این عکس را در پنجره ی اصلی کپی کنیم، باید از دستور زیر استفاده کنیم؛

SDL_BlitSurface( image, NULL, screen, NULL );

ورودی اوّل همان عکس مورد نظر است. ورودی دوم یک SDL_Rect است که مستطیلی از عکس را مشخّص می کند که قرار است کپی شود (اگر NULL باشد کلّ عکس کپی می شود.).  ورودی سوم پنجره ی برنامه و ورودی چهارم مکان کپی شدن عکس در پنجره است (که آن هم از نوع SDL_Rect است و اگر NULL باشد،‌گوشه ی بالا سمت چپ عکس بر گوشه ی بالا سمت چپ پنجره منطبق می شود.).

SDL_Rect چهار متغیّر دارد؛ x، y، w و h. متغیر های x و y موقعیت گوشه ی بالا سمت چپ را مشخّص کرده و w و h به ترتیب طول و عرض را مشخّص می کنند. اگر ورودی دوم NULL نباشد، SDL با توجّه به متغیرهای SDL_Rect مکان کپی شده از عکس را مشخّص می کند و اگر ورودی چهارم NULL نباشد، SDL با توجّه به عضو های SDL_Rect عکس را در صفحه کپی می کند.

حالا عکس در پنجره کپی شده است ولی هنوز در پنجره مشخّص نیست. دلیل آن هم این است که شما باید هر گاه که می خواهید پنجره تغییرات اعمال شده را نشان دهد، از تابع زیر استفاده کنید؛

SDL_Flip( SD_Surface* );

اگر از این تابع استفاده نکنید، پنجره هم هیچ تغییری نمی کند. حالا که screen تغییر پیدا کرده است، باید آن را refresh کنید؛

SDL_Flip( screen );

حالا عکس در پنجره نشان داده خواهد شد.

برنامه ای که این جلسه با هم تکمیل کردیم را می توانید از این جا دریافت کنید. هنوز کمی ریزه کاری باقی مانده که در مطلب بعد آن ها را ذکر خواهیم کرد.

موفق باشید!