Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Bitmap-класс для прямой отрисовки не экране

From Wiki
Jump to: navigation, search
Article Metadata

Статья
Перевод:
truf
Последнее редактирование: hamishwillee (09 Dec 2011)
----

Если для отрисовки необходим прямой доступ к экрану (например, в играх), то следующий пример продемонстрирует вам как поместить изображения (спрайты) в буфер экрана напрямую.

Примечания к примеру

  • Подразумевается, что изображения хранятся в mbm файле, расположенном в папке private программы.
  • Для хранения изображения выделяется память в куче. Затем изображение конвертируется в формат, пригодный для его отрисовки в буфер экрана.
  • Не забывайте использовать ключ /c24 при создании mbm файла с помощью утилиты mifconv, чтобы задать правильную насыщенность цвета.

Ссылки

Код

////////////////////////////////
// Заголовок
////////////////////////////////
 
#define TPixel TUint32
 
class CMyBitmap : public CBase
{
...
 
TPixel* iData;
TSize iSize;
 
...
};
 
////////////////////////////////
// cpp
////////////////////////////////
 
...
 
_LIT( KMyBitmapFile,"MyGame.mbm" );
 
// CMyBitmap представляет собой изображение для
// отрисовки напрямую на экран
// aIndex индекс изображения в mbm файле
void CMyBitmap::ConstructL( TInt aIndex )
{
CFbsBitmap* image = new( ELeave ) CFbsBitmap;
CleanupStack::PushL( image );
 
// Определение местоположения mbm файла
TFileName path;
 
#ifdef __WINS__
path.Append( _L("z:\\resource\\apps\\") );
#else
path.Copy(CEikonEnv::Static()->EikAppUi()->Application()->AppFullName().Left(2));
TFileName relPath;
CEikonEnv::Static()->FsSession().PrivatePath( relPath );
path.Append( relPath);
#endif
 
path.Append( KMyBitmapFile );
 
// Загружаем изображение (bitmap)
User::LeaveIfError( image->Load( path, aIndex, EFalse ) );
 
// Выделяем память в куче
iSize = image->SizeInPixels();
// Не забудьте удалить его в деструкторе
iData = new ( ELeave ) TPixel[ iSize.iWidth * iSize.iHeight ];
 
// TBitmapUtil служит для доступа к пикселям
TBitmapUtil sourceUtil( image );
 
for ( TInt y = 0; y < iSize.iHeight; y++ )
{
sourceUtil.Begin( TPoint( 0, y ) );
for ( TInt x = 0; x < iSize.iWidth; x++ )
{
*(iData + y * iSize.iWidth + x) = sourceUtil.GetPixel();
sourceUtil.IncXPos();
}
sourceUtil.End();
}
CleanupStack::PopAndDestroy();
}
 
...
This page was last modified on 9 December 2011, at 01:57.
207 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×