This page was last modified 14:45, 24 October 2007.
Bitmap-класс для прямой отрисовки не экране
From Forum Nokia Wiki
Перевод с английского, оригинальная статья находится здесь.
Если для отрисовки необходим прямой доступ к экрану (например, в играх), то следующий пример продемонстрирует вам как поместить изображения (спрайты) в буфер экрана напрямую.
Примечания к примеру
- Подразумевается, что изображения хранятся в 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++ ) { *(TUint32( iData + y * iSize.iWidth + x )) = TMpPixel( sourceUtil.GetPixel() ); sourceUtil.IncXPos(); } sourceUtil.End(); } CleanupStack::PopAndDestroy(); } ...
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Emulator (Debug) cannot run the bitmap example | binch | General Symbian C++ | 1 | 2004-12-29 03:45 |
| BITMAP to JPG | toxisch | General Symbian C++ | 2 | 2004-07-21 05:33 |
| Drawing transparent text using CTextView | adamhusar | General Symbian C++ | 2 | 2006-09-07 06:33 |
| 关于二值图像问题 | freesui1984 | Symbian | 1 | 2008-02-11 03:00 |
| bitmap drawing problem in exe | vladi_rang | General Symbian C++ | 0 | 2004-02-19 08:33 |
