⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitmapmethods.cpp

📁 S60培训教材代码(连载)
💻 CPP
字号:
// Copyright (c) 2000, Nokia Mobile Phones. All rights reserved.

#include "bitmapmethods.h"
#include <eikenv.h>
#include <fbs.h>


CFbsBitGc* NBitmapMethods::CreateGraphicsContextLC(CFbsBitmapDevice& aBitmapDevice)
    {
    CFbsBitGc* graphicsContext = NULL;
    User::LeaveIfError(aBitmapDevice.CreateContext(graphicsContext));
    CleanupStack::PushL(graphicsContext);
    return graphicsContext;
    }


CFbsBitGc* NBitmapMethods::CreateGraphicsContextL(CFbsBitmapDevice& aBitmapDevice)
    {
    CFbsBitGc* gc = CreateGraphicsContextLC(aBitmapDevice);
    CleanupStack::Pop(gc);
    return gc;
    }


CFbsBitmapDevice* NBitmapMethods::CreateBitmapDeviceLC(CFbsBitmap& aBitmap)
    {
    CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL(&aBitmap);
    CleanupStack::PushL(bitmapDevice);
    return bitmapDevice;
    }


CFbsBitmapDevice* NBitmapMethods::CreateBitmapDeviceL(CFbsBitmap& aBitmap)
    {
    CFbsBitmapDevice* device = CreateBitmapDeviceLC(aBitmap);
    CleanupStack::Pop(device);
    return device;
    }


CFbsBitmap* NBitmapMethods::CreateBitmapLC(TSize aSizeInPixels,TDisplayMode aDispMode)
    {
    CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();
    CleanupStack::PushL(bitmap);
    User::LeaveIfError(bitmap->Create(aSizeInPixels,aDispMode));
    ASSERT((bitmap->DisplayMode() == KColourDepth) || (bitmap->DisplayMode()  == EGray2));
    return bitmap;
    }


CFbsBitmap* NBitmapMethods::CreateBitmapL(TSize aSizeInPixels,TDisplayMode aDispMode)
    {
    CFbsBitmap* bitmap = CreateBitmapLC(aSizeInPixels,aDispMode);
    CleanupStack::Pop(bitmap);
    return bitmap;
    }


CFbsBitmap* NBitmapMethods::CreateBitmapLC(const TDesC& aFileName,TInt aId)
    {
    CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();

    CleanupStack::PushL(bitmap);
    TInt loadException = bitmap->Load(aFileName,aId);
    User::LeaveIfError(loadException);

    if ((bitmap->DisplayMode() == KColourDepth) || (bitmap->DisplayMode()  == EGray2))
        {
        return bitmap;
        }
    else
        {
        CFbsBitmap* newBitmap = CreateBitmapLC( bitmap->SizeInPixels(),KColourDepth);                                                           

        CFbsBitmapDevice*       bitmapDevice    = CreateBitmapDeviceLC(*newBitmap);
        CFbsBitGc*              bitmapGc        = CreateGraphicsContextLC(*bitmapDevice);
        bitmapGc->BitBlt(TPoint(0,0),bitmap,TRect(bitmap->SizeInPixels()));
        CleanupStack::PopAndDestroy(2); // gc and device
        // The next three lines are here to get rid of the old bitmap but keep the new one 
        CleanupStack::Pop(newBitmap);
        CleanupStack::PopAndDestroy(bitmap);
        CleanupStack::PushL(newBitmap);

        return newBitmap;
        }
    }


CFbsBitmap* NBitmapMethods::CreateBitmapL(const TDesC& aFileName,TInt aId)
    {
    CFbsBitmap* bitmap = CreateBitmapLC(aFileName, aId);
    CleanupStack::Pop(bitmap);
    return bitmap;
    }

void NBitmapMethods::BitBltMaskedEntireBitmap(CFbsBitGc& aTargetGc,TPoint aTopLeft,
                                              const CFbsBitmap& aBitmap,const CFbsBitmap& aBitMask)
    {
    PartialReset(aTargetGc);
    aTargetGc.BitBltMasked(aTopLeft,&aBitmap,aBitmap.SizeInPixels(),&aBitMask,ETrue);
    PartialReset(aTargetGc);
    }


void NBitmapMethods::PartialReset(CFbsBitGc& aGc)
    {
    aGc.SetPenSize(TSize(1,1));
    aGc.SetPenColor(KRgbBlack);
    aGc.SetPenStyle(CFbsBitGc::ESolidPen);
    aGc.SetDrawMode(CFbsBitGc::EDrawModePEN);
    aGc.DiscardFont();
    aGc.DiscardBrushPattern();
    aGc.SetBrushColor(KRgbWhite);
    aGc.SetBrushStyle(CFbsBitGc::ENullBrush);
    aGc.SetCharJustification(0,0);
    aGc.SetWordJustification(0,0);
    aGc.SetDitherOrigin(TPoint(0,0));
    aGc.SetPenStyle(CFbsBitGc::ENullPen);
    aGc.SetShadowMode(EFalse);
    aGc.SetStrikethroughStyle(EStrikethroughOff);
    aGc.SetUnderlineStyle(EUnderlineOff);
    aGc.SetUserDisplayMode(ENone);
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -