تبليغاتX
برنامه نویسی سیمبین سری 60
چگونه با فایلهای MBM کار کنیم؟! یکشنبه بیست و نهم مهر 1386 15:35

MBM به معنای Multi BitMap به فایل‌های تصویری چندگانه در سیمبین گفته می‌شود. همانطور که از نامشان معلوم است، این فایل‌ها محتوی چند فایل تصویری هستند.

 

MBMها ممکن است در RAM یا ROM ذخیره شوند. آنهایی که در ROM هستند، فشرده نیستند و بدون گرفتن حافظه جدید، می‌توان با آنها کار کرد. MBMهایی که در RAM ذخیره شده‌اند، (به طور پیشفرض) فشرده هستند و قبل از استفاده کردن، باید آنها را از حالت فشردگی خارج کرد. به همین دلیل، قبل از این که بتوانیم با آنها کار کنیم، باید برایشان حافظه جدید درنظر گرفت و آنها را از حالت فشردگی خارج کرد.

 

این نوع فایل‌ها در سیمبین دارای پشتیبانی داخلی هستند و نیازی به هیچگونه برنامه یا ... خارجی برای استفاده کردن از این فایل‌ها نیست. کار کردن با این فایل‌ها بسیار ساده است.

 

MBMها را به دو طریق می‌توان ایجاد کرد.

روش اول استفاده کردن از برنامه bmconv است. با استفاده از این دستور در خط فرمان، می‌توان مستقیماً یک فایل MBM، از روی تعدادی فایل تصویری موجود، ایجاد کرد.

روش دوم تعریف کردن فایل MBM در فایل mmp است. با استفاده از دستور START BITMAP می‌توان یک فایل MBM ایجاد کرد. مثال:

 

// MyGame.mmp

START BITMAP MyGame.mbm

HEADER

TARGETPATH ..\..\..\..\wins\c\system\apps\MyGame

SOURCEPATH ..\MyBitmaps

// color-depth source-bitmap

SOURCE c12 image1.bmp

SOURCE c12 image2.bmp

SOURCE c12 image3.bmp

END

 

برای هر تصویر موجود در فایل MBM، یک شماره اختصاص داده می‌شود. این عددها در فایل mbg که در مسیر includeهای سیستم ایجاد می‌شود، ذخیره می‌شوند. هر ID به طور اتوماتیک ایجاد می‌شود و به فرمت زیر است:

EMbm

 

برای مثال:

EMbmMygameImage1

 

برای دسترسی داشتن به تصویرهای موجود در فایل MBM، می‌توان از کدی مثل زیر استفاده کرد:

 

#include // generated on compilation

#include // for CompleteWithAppPath()

CFbsBitmap* CMyGameView::LoadMyBitmapL()

{

// set the name of the multi-bitmap file containing the bitmaps

_LIT(KMBMFileName,"MyGame.mbm");

TFileName mbmFileName(KMBMFileName);

CompleteWithAppPath(mbmFileName);

// load the bitmap from the mbm file

CFbsBitmap* bitmap = new (ELeave) CFbsBitmap();

CleanupStack::PushL(bitmap);

// EMbmMygameImage1 is enumerated value from MyGame.mbg file

User::LeaveIfError(bitmap->Load(mbmFileName, EMbmMygameImage1));

CleanupStack::Pop(); // bitmap

return bitmap;

}

 

بعد از این که تصویر لود شد، می‌توان آن را در صفحه، توسط مثلاً BitBlt رسم کرد:

 

void CMyGameView::Draw( const TRect& /*aRect*/ ) const

{

// Get the system graphics context

CWindowGc& gc = SystemGc();

          // Draw the bitmap

gc.BitBlt( TPoint(10, 10), iMyShipBitmap);

}

 

برای کشیدن تصاویری که بخشی از آنها شفاف است، می‌توان از ماسک استفاده کرد. ماسک‌ها، تصاویری سیاه و سفید هستند و اندازه‌شان، معادل با عکس متناظرشان است. پیکسل‌های سفید، در عکس اصلی متناظر جاهایی هستند که نباید کشیده شوند و پیکسل‌های سیاه هم جاهایی را نشان می‌دهند که باید در تصویر رسم شوند. بعضی متدها هم عکس این موضوع کار می‌کنند. ماسک‌ها دقیقاً مثل تصاویر عادی لود می‌شوند.

برای کشیدن یک تصویر با یک ماسک، می‌توان از کدی مثل زیر استفاده کرد:

 

void CMyGameView::Draw( const TRect& /*aRect*/ ) const

{

// Get the system graphics context

CWindowGc& gc = SystemGc();

// Draw masked bitmap

gc.BitBltMasked( TPoint(10, 10), iMyShipBitmap, iMyShipRect,

iMyShipMask, EFalse);

}
نوشته شده توسط موسی مرادی | موضوع: | لينک ثابت |