BREW学习笔记 - IDIB 接口(一)

IDIB
说明:
此结构用于定义 BREW 设备无关位图的格式。
IDIB 是一种结构和接口。 IDIB 继承了 IBitmap 的全部成员函数,因此通过类型转换,IDIB 可用作 IBitmap。 (IDIB_TO_IBITMAP 内联函数用于实现安全的类型转换。) 与其它 BREW 接口不同,IDIB 还包含公用数据成员。 这些数据成员可用于高效读取或修改图像数据。

通常,应用程序通过使用ClassID AEECLSID_DIB 调用 IBITMAP_QueryInterface() 来从 IBitmap 指针获取 IDIB 指针。 并非所有的 IBitmap 类都支持 IDIB。在不支持的情况下,QueryInterface() 将返回错误代码。 如果成功,则返回 IDIB 指针,调用者在使用完该指针之后,必须将其释放。

位图由二维像素数组构成。 IDIB 包含指示像素在内存中所处位置,以及如何解释这些像素值的成员。
定义:
OBJECT(IDIB) {
   AEEVTBL(IDIB)  *pvt;
   IQueryInterface * pPaletteMap;
   byte *            pBmp;
   uint32 *          pRGB;
   NativeColor       ncTransparent;
   uint16            cx;
   uint16            cy;
   int16             nPitch;
   uint16            cntRGB;
   uint8             nDepth;
   uint8             nColorScheme;
   uint8             reserved[6];
}
详参API文档。

 

IDIB_TO_IBITMAP()
说明:
此函数提供从 IDIB 接口指针到 IBitmap 接口指针进行安全的类型转换。 此函数应该用于将 IDIB 接口传递给 IBitmap 函数时。 由于编译器将验证指针类型,所以它比简单转换更安全。
原型:
__inline IBitmap *IDIB_TO_IBITMAP
(
const IDIB *pIDIB
)


IBITMAP_QueryInterface()
此函数继承于 IQI_QueryInterface()。

 

IQI_QueryInterface()
说明:
此方法用于向对象请求其它的 API 合约。
原型:
int IQI_QueryInterface
(
IQueryInterface *po,
AEECLSID idReq,
void **ppo
)
参数:
po: 指向对象的指针
idReq: 对象显露的所请求ClassID ppo: (out) 返回的对象。 由此方法填充

以上函数的示例代码如下:

IBitmap* pScrBitmap = NULL; IDIB* pScrDIB = NULL; IDIB* pBgDIB = ((CFINERING*)GETAPPINSTANCE())->pBgDIB; CFINERING * pApp = (CFINERING *)GETAPPINSTANCE(); // 获取显示器位图 IDISPLAY_GetDeviceBitmap(po, &pScrBitmap); // 获取显示缓冲区 if( NULL != pScrBitmap ) { IBITMAP_QueryInterface(pScrBitmap, AEECLSID_DIB, (void**)& pScrDIB); IBITMAP_Release(pScrBitmap); // 引用计数减1 pScrBitmap = NULL; } // 这时,pScrDIB里面是原来IHtmlViewer载入的页面的位图数据,pBgDIB里是背景图片 // 的位图数据,我们pScrDIB里白色的点用pBgDIB对应的点来替换。这里假设设备的颜色 // 深度为16bit if(pBgDIB) { uint16* pixel = (uint16*)pScrDIB->pBmp; uint16* bgpixel = (uint16*)pBgDIB->pBmp; int pcount = pBgDIB->cx * pBgDIB->cy; for(; pcount; --pcount) { if(*pixel == 0xffff) { *pixel = *bgpixel; } ++pixel; ++bgpixel; } } IDISPLAY_UpdateEx( pApp->a.m_pIDisplay, bDefer); if( NULL != pScrDIB ) { IDIB_Release(pScrDIB); pScrDIB = NULL; }

 

GETAPPINSTANCE()
说明:
此函数用于返回当前正在执行的小程序的 IApplet 实例。 它在所有的 BREW API 调用、回调和事件中均有效。
原型:
IApplet *GETAPPINSTANCE
(
void
)

参数:

返回值:
返回指向当前正在执行的小程序的 IApplet 指针。 

 

IDISPLAY_UpdateEx()
说明:
如果目标位图为设备位图,此函数可用于更新屏幕。 如果将 bDefer 标记设置为 true,屏幕将立即刷新(更新)。 如果将 bDefer 标记设置为 false,更新消息公布到 UI 任务队列中,因此
在更新屏幕前要允许所有绘制完成操作。

例如以下伪代码段:
1.DrawText;
2.BitBlt;
3.UpdateEx;
将确保所有绘制操作完成后立即更新屏幕。
原型:
void IDISPLAY_UpdateEx
(
IDisplay* po,
boolean bDefer
)
参数:
po:[in]: 指向要更新的 IDisplay 接口对象的指针。
bDefer: [in]: 指明是要立即更新还是延迟更新屏幕的布尔标记。

你可能感兴趣的:(2.2,BREW)