8使用ibitmap显示位图概要

上传人:今*** 文档编号:107207734 上传时间:2019-10-18 格式:PPT 页数:26 大小:191.50KB
返回 下载 相关 举报
8使用ibitmap显示位图概要_第1页
第1页 / 共26页
8使用ibitmap显示位图概要_第2页
第2页 / 共26页
8使用ibitmap显示位图概要_第3页
第3页 / 共26页
8使用ibitmap显示位图概要_第4页
第4页 / 共26页
8使用ibitmap显示位图概要_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《8使用ibitmap显示位图概要》由会员分享,可在线阅读,更多相关《8使用ibitmap显示位图概要(26页珍藏版)》请在金锄头文库上搜索。

1、IBitmap接口的使用,计算机系:孙斌 办公室:C117(电话:84835205) Email:sunbin,Sun Bin 2009,BREW技术开发与应用,BREW中图片的显示与处理,BREW 中对于图片的显示,可以使用以下几个接口 IImage接口(图片的显示与动画的播放) IImageCtl接口(滚动图片,略) IBitmap接口(位图的显示与渲染) 除了用到以上接口外,还会涉及到IDisplay接口等,Sun Bin 2009,BREW技术开发与应用,IImage接口,IImage接口 主要用于实现 图片的显示IImage_Draw() 动画的播放与停止IImage_Start()

2、、IImage_Stop() 显示方式的设置(图片显示的大小、偏移、显示坐标的设置等)IImage_SetDrawSize()、IImage_SetOffset() 该接口不能对加载的图片进行渲染,Sun Bin 2009,BREW技术开发与应用,IBitmap接口,IBitmap接口 主要用于实现位图的加载与显示,同时还可以对位图的像素进行处理,从而实现对位图的渲染,Sun Bin 2009,BREW技术开发与应用,IBitmap接口显示位图的过程,DIB与DDB DIB:Device Independence Bitmap设备无关位图 DDB:Device Dependence Bitma

3、p设备相关位图 一个位图保存成文件时,需要记录图片的大小、色彩等信息,这些是与设备无关的 一个位图在显示的时候,需装载到内存中,这是与显示设备相关的,Sun Bin 2009,BREW技术开发与应用,IBitmap接口显示位图的过程,屏幕的显示缓冲区 屏幕上看到的内容与其显示缓冲区中的内容是一一对应的 当我们要在屏幕上绘制内容,可以将数据写入显示缓冲区,然后更新到屏幕上 也可以先在一个缓冲区中将数据准备好,然后将这个缓冲区中的内容传输到显示缓冲区,然后再更新到屏幕上,Sun Bin 2009,BREW技术开发与应用,IBitmap接口显示位图的过程,显示步骤 得到屏幕的显示缓冲区 将要显示的图

4、片加载到内存缓冲区(假设为buf1)中,并获取图片信息(大小、颜色等) 根据图片大小创建一个与屏幕显示缓冲区兼容的新缓冲区(假设为buf2,该缓冲区是与设备相关的) 将图片从原缓冲区buf1传输到新缓冲区buf2 对buf2中的图片进行渲染 将buf2中的图片传输到显示缓冲区,然后再更新到屏幕上,Sun Bin 2009,BREW技术开发与应用,IBitmap接口显示位图的过程,屏幕 128*160,屏幕显示 缓冲区,与设备(显示器) 兼容的缓冲区 Buf2 300*200 a.bmp,位图文件 a.bmp 300*200,图片初始缓冲区 Buf1 300*200 a.bmp,IDISPLAY

5、_GetDestination(),ISHELL_LoadBitmap(),IBITMAP_CreateCompatibleBitmap(),IBITMAP_BltIn(),IDISPLAY_BitBlt(),IDISPLAY_Update(),1,3,2,4,5,6,Sun Bin 2009,BREW技术开发与应用,用到的函数,IDISPLAY_GetDestination() 得到屏幕的显示缓冲区 返回屏幕位图的指针 该指针使用完,应使用IBITMAP_Release()释放掉,Sun Bin 2009,BREW技术开发与应用,用到的函数,ISHELL_LoadBitmap() 将指定的位

6、图加载到内存缓冲区中 返回指向位图的指针(位图的 IBitmap * 句柄 ) 该位图使用完,也应使用IBITMAP_Release()释放掉,Sun Bin 2009,BREW技术开发与应用,用到的函数,IBITMAP_GetInfo() 获取位图的信息 得到的位图信息填入AEEBitmapInfo 类型的结构体变量中 typedef struct uint32 cx; 位图的宽度 uint32 cy; 位图的高度 uint32 nDepth; 颜色深度 AEEBitmapInfo;,Sun Bin 2009,BREW技术开发与应用,用到的函数,int IBITMAP_CreateCompa

7、tibleBitmap(IBITMAP *po, IBitmap *ppIBitmap,uint16 w, uint16 h ) 根据po指向的原位图,创建一个与其兼容的、大小为w*h的新的位图缓冲区, 得到的新位图的缓冲区由ppIBitmap指针指向 参数: po:指向当前位图(源位图)接口的指针 ppIBitmap:指向要创建的兼容新位图的指针 w,h:新位图的宽和高 返回值: 成功:SUCCESS,Sun Bin 2009,BREW技术开发与应用,用到的函数,int IBITMAP_BltIn (IBitmap * po,int xDst,int yDst,int dx,int dy,I

8、Bitmap*pSrc, int xSrc,int ySrc,AEERasterOp rop ) 将位图从源缓冲区传输到目标缓冲区 目标缓冲区指针po,目标传输区域起始坐标点xDst,yDst;目标区域大小dx,dy 源缓冲区指针pSrc,原缓冲区传输起始坐标点xSrc,ySrc rop:传输光栅操作(传输的方式)AEERasterOp AEE_RO_OR :源位图的像素值与目标位图的像素值作OR(或)操作 AEE_RO_COPY :将源位图的像素直接复制到目标位图 。,Sun Bin 2009,BREW技术开发与应用,用到的函数,int IDISPLAY_BitBlt () 将位图从源缓冲区

9、传输到显示缓冲区 参数同IBITMAP_BltIn();,Sun Bin 2009,BREW技术开发与应用,对位图进行处理(渲染),IDIB 接口/结构 IDIB是一个接口,也是一个结构 与其它 BREW 接口不同,IDIB 还包含公用数据成员。 这些数据成员可用于高效读取或修改图像数据。 通过IDIB可以控制位图的内部像素 对于一个位图,可以通过使用AEECLSID_DIB作为ClassID来调用IBITMAP_QueryInterface()来获取IDIB指针 得到一个位图的IDIB指针,在使用完后应该释放,Sun Bin 2009,BREW技术开发与应用,对位图进行处理(渲染),获取ID

10、IB 接口/结构 的指针 对于一个位图,可以通过使用AEECLSID_DIB作为ClassID来调用IBITMAP_QueryInterface()来获取IDIB指针 IBITMAP_QueryInterface (IBitmap *po, AEECLSID idReq, void *ppo ) 参数: po:指向位图的指针 idReq:要获取的IDIB接口的ClassID,AEECLSID_DIB ppo:获得的IDIB指针 得到一个位图的IDIB指针,在使用完后应该释放,Sun Bin 2009,BREW技术开发与应用,对位图进行处理(渲染),IDIB是一个接口,也是一个结构 OBJECT

11、(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 reserved6; ,Sun Bin 2009,BREW技术开发

12、与应用,IDIB结构,IDIB是接口,也是一个结构,其主要成员如下: byte * pBmp; 指向像素数组的指针 uint16 cx; 图片的宽度,如100 uint16 cy; 图片的高度,如60 int16 nPitch; 两行像素之间的偏移量(也是图片每 一行像素所占字节数) uint8 nDepth; 每个像素的大小(以位为单位),Sun Bin 2009,BREW技术开发与应用,100*60的位图,颜色深度8bits,一个位图就是一个二维的像素矩阵 假设一个100*60的位图,颜色深度为8bit(每个像素用1个字节表示其颜色),则该位图共有6000个像素点(共60行,每行100个像

13、素),共需要6000个字节表示该位图 在BREW的IDIB中,这6000个字节的数据保存在一个一维数组中,指向该数组的指针是IDIB中的pBmp, 该数组中,前100个字节(pBmp0pBmp99)是位图第一行100个像素的颜色值,接下来的100个字节(pBmp100pBmp199)是位图第二行100个像素的颜色值。依此类推, (pBmp5000pBmp5999)是位图第60行100个像素的颜色值。,Sun Bin 2009,BREW技术开发与应用,100*60的位图,颜色深度8bits,pBmp数组 pBmp0 pBmp1。 pBmp5999,60行,每行100个像素,0,1,98,99,1

14、00,101,198,199,200,5999,5998,5900,第一行的100个像素,第二行的100个像素,第60行的100个像素,Sun Bin 2009,BREW技术开发与应用,100*60,8bits颜色位图的IDIB结构,IDIB结构主要成员如下: byte * pBmp; pBmp0 pBmp5999 uint16 cx; 图片的宽度,如100 uint16 cy; 图片的高度,如60 int16 nPitch; 100字节(图片每行像素所占字节数) uint8 nDepth; 8bits,Sun Bin 2009,BREW技术开发与应用,100*60的位图,颜色深度16bits

15、,假设一个100*60的位图,颜色深度为16bits,即每个像素用2个字节表示其颜色 则该位图共有6000个像素点(共60行,每行100个像素),共需要6000*2 = 12000个字节表示该位图 在IDIB中,这12000个字节的数据保存在一维数组pBmp, 该数组中, pBmp0,pBmp1这两个字节描述的是第一行第一个像素的颜色, pBmp2,pBmp3这两个字节描述的是第一行第二个像素的颜色 前200个字节(pBmp0pBmp199)是位图第一行100个像素的颜色值,接下来的200个字节(pBmp200pBmp399)是位图第二行100个像素的颜色值。依此类推, (pBmp11800pBmp11999)是位图第60行100个像素的颜色值。,Sun Bin 2009,BREW技术开发与应用,100*60,16bits颜色位图的IDIB结构,IDIB结构主要成员如下: byte * pBmp; pBmp0 pBmp11999 uint16 cx; 图片的宽度,如100 uint16 cy; 图片的高度,如60 int16 nPitch; 200字节(图片每行像素所占字节数) uint8 nDepth; 16bits,Sun Bin 2009,BREW技术开发与应用,位图的处理反转,要想得到对一个位图进行左右反转的效果: 就是对位图中每一行左右

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号