| DrawDib函数组的使用 |
| 责任编辑:admin 更新日期:2005-8-6 |
nbsp; //具体参数请参见前面函数参考
Suc = DrawDibDraw(hdd,
hdc,
xDst,
yDst,
dxDst,
dyDst,
lpbi,
lpbits,
xSrc,
ySrc,
dxSrc,
dySrc,
wFlags);
if(Suc == FALSE) AfxMessageBox("DrawDib Failed");
/* //时间测试
DRAWDIBTIME time;
DrawDibTime(hdd ,&time);
char buf[256];
sprintf(buf,"Count %d\nDraw %d\nDecompress %d\n
Dither %d\nStretch %d\nBlt %d\n SetDIBits %d\n",
time.timeCount,time.timeDraw,
time.timeDecompress,time.timeDither,
time.timeStretch,time.timeBlt,
time.timeSetDIBits);
AfxMessageBox(buf);
*/
DrawDibClose(hdd);
}
else
AfxMessageBox("Error in DrawDibOpen");
GlobalUnlock(m_DibMem);//释放DIB句柄
}
附:函数参考:
DrawDibBegin
这个DrawDib函数改变一个DrawDib DC的参数或初始化一个新的DrawDib DC.
BOOL DrawDibBegin(
HDRAWDIB hdd,
HDC hdc,
int dxDest,
int dyDest,
LPBITMAPINFOHEADER lpbi,
int dxSrc,
int dySrc,
UINT wFlags
);
参数
hdd DrawDib DC的句柄
hdc 绘图DC的句柄。此参数为可选。
dxDst和dyDst 在MM_TEXT方式下目的矩形的宽度和高度。
lpbi 包含图象格式的BITMAPINFOHEADER结构的地址。DIB颜色表紧跟图象格式,并且biHeight成员必须为一正值。
dxSrc和dySrc 源矩形的宽度和高度(以象素为单位)。
wFlags 函数调用的可用标志。定义了以下的值:
DDF_ANIMATE 允许调色板动画。如果这个值被设置,通过在LOGPALETTE结构中设置palPalEntry成员PC_RESERVED标志,则DrawDib保存了尽可能多的入口,调用drawDibChangePalette函数就可实现调色板动画。如果应用程序用了DrawDibBegin函数协同DrawDibDraw函数,最好在DrawDibBegin中设置这个值而不在DrawDibDraw中。
DDF_BACKGROUNDPAL 实现作为背景的调色板,保留当前显示所使用的调色板不变。(这个值与DDF_SAME_HDC互斥。)
DDF_BUFFER 使DrawDib使用屏幕缓冲,这样DDF_UPDATE才可使用。这关闭了解压和直接绘屏。如果DrawDib不能创建一个脱屏缓冲,就解压或直接绘屏。
DDF_DONTDRAW 当前图象未绘,但已解压。DDF_UPDATE能够以后被用来绘图象。这个标志取代了DDF_PREROLL标志。
DDF_FULLSCREEN 不被支持。
DDF_HALFTONE 不管DIB的调色板如何而把DIB抖动成标准调色板。如果应用程序用DrawDibBegin协同DrawDibDraw,在DrawDibBegin中设置这个值而不在DrawDibDraw中。
DDF_JUSTDRAWIT 用GDI绘这图象。禁止DrawDib函数解压,拉伸或抖动图象。这实际上剥夺了DrawDib区别于StrechDIBits函数的能力。
DDF_SAME_DRAW 让DrawDibDraw使用当前的绘制参数。只有当从使用DrawDibDraw或DrawDibBegin起,lpbi、dxDext、dyDest、dxSrc和dySrc就未改变才用这个值。这个标志取代了DDF_SAME_DIB和DDF_SAME_SIZE标志。
DDF_SAME_HDC 使用当前DC句柄以及与当前句柄相关联的调色板。
DDF_UPDATE 最后缓存的图象需要绘制。如果用这个值绘制失败,则缓冲的图象不在有效,并且在显示被更新前,需要指定一幅新的图象。
返回值
成功返回TRUE,否则FALSE。
注 这个函数准备由lpbi指定要绘往DC的DIB。图象已经拉伸成由dxDest和dyDest所指定的大小。如果dxDest和dyDest被设置成-1,DIB则被按原比例绘制。
可通过重新使用DrawDibBegin,指定新的标志和改变至少一个以下的设置:dxDest、dyDest、lpbi、dxSrc或dySrc来更新DrawDib DC的标志。
如果DrawDibBegin的参数未被改变,再次调用这个函数将不起作用。
DrawDibChangePalette
这个函数设置绘DIB所用的调色板。
BOOL DrawDibChangePalette(
HDRAWDIB hdd,
int iStart,
int iLen,
LPPALETTEENTRY lppe
);
参数:
hdd DrawDib DC的句柄。
iStart 调色板开始数。
iLen 调色板的数目。
lppe 调色板阵列的地址。
返回值
成功返回TRUE,否则FALSE。
注 只有当当前DrawDib调色板是调用DrawDibRealize函数实现时,这个函数改变物理调色板。
如果颜色表没有改变,下次没有指定DDF_SAME_DRAW的DrawDibDraw函数将隐含地调用DrawDibBegin函数。
DrawDibClose
这个函数关闭一个DrawDib DC并释放DrawDib申请的资源。
BOOL DrawDibClose(
HDRAWDIB hdd
);
参数
hdd DrawDib DC的句柄。
返回值
成功返回TRUE,否则FALSE。
DrawDibDraw
这个函数将DIB绘至屏幕。
BOOL DrawDibDraw(
HDRAWDIB hdd,
HDC hdc,
int xDst,
int yDst,
int dxDst,
int dyDst,
LPBITMAPINFOHEADER lpbi,
LPVOID lpBits,
int xSrc,
int ySrc,
int dxSrc,
int dySrc,
UINT wFlags
);
参数
hdd DrawDib DC的句柄。
hdc DC的句柄。
xDst和yDst 在MM_TEXT坐标系,目标矩形左上角的x和y坐标。
dxDst和dyDst 在MM_TEXT坐标系下,目标矩形的宽度和高度。如果dxDst为-1,则使用位图的宽度;如果dyDst为-1,则使用位图的高度。
lpbi 包含图象格式的BITMAPINFOHEADER结构的地址。DIB的颜色表紧跟着格式后,并且biHeight成员必须为正值;DrawDibDraw不能绘制倒置的DIB。
lpbits 包含位图位的缓冲的地址。
xSrc和ySrc 以象素为单位,源矩形左上角的x和y坐标。坐标(0,0)是位图的左上角。
dxSrc和dySrc 以象素为单位,源矩形的宽度和高度。
wFlags 可用的绘图标志。如下值被定义:
DDF_BACKGROUNDPAL 实现作为背景的调色板,保留当前显示所使用的调色板不变。这个值只有当DDF_SAME_HDC未被设置时才有效。
DDF_DONTDRAW 当前图象已解压但未绘。这个标志取代了DDF_PREROLL标志。
DDF_FULLSCREEN 不被支持。
DDF_HALFTONE 不管DIB的调色板如何而把DIB抖动成标准调色板。如果应用程序使用了DrawDibBegin,在DrawDibBegin中设置而不在DrawDibDraw中。
DDF_HURRYUP 数据并不需要被绘(它可以被绘)并且DDF_UPDATE不用理会这个信息。DrawDib只有当需要去构建另一帧时才检查这个值;否则,这个值被忽略。
这个值通常用来同步视频和音频。当同步数据时,应用程序应当用这个值发送图象以防止驱动器需要缓冲帧来解压后续帧。
DDF_NOTKEYFRAME DIB数据不是关键帧。
DDF_SAME_HDC 使用当前DC句柄以及与当前句柄相关联的调色板。
DDF_SAME_DRAW 让DrawDibDraw使用当前的绘制参数。只有当从使用DrawDibDraw或DrawDibBegin起,lpbi、dxDext、dyDest、dxSrc和dySrc就未改变才用这个值。DrawDibDraw经常检查这些参数,如果它们改变了,DrawDibBegin则准备绘图的DrawDib DC。这个标志取代了DDF_SAME_DIB和DDF_SAME_SIZE标志。
DDF_UPDATE 最后缓存的图象需要绘制。如果用这个值绘制失败,则缓冲的图象不在有效,并且在显示被更新前,需要指定一幅新的图象。
返回值
成功返回TRUE,否则FALSE。
注 DDF_DONTDRAW使DrawDibDraw解压但不显示一幅图象。一个调用DrawDibDraw的序列是指定DDF_UPDATE来显示图象。
如果DrawDib DC没有指定一个屏幕缓冲,指定DDF_DONTDRAW会造成这帧被立即绘到屏幕。序列调用DrawDibDraw指定DDF_UPDATE会失败。
尽管DDF_UPDAT和DDF_DONTDRAW可以在不同时间设置,它们可以一起用来创建脱屏图象。当脱屏图象完成后,可以调用DrawDibDraw来显示图象。
DrawDibEnd
这个函数清除由DrawDibBegin上一页 [1] [2] [3] [4] 下一页 |
|
| 上一篇文章: 用C++ Builder开发动画DLL |
| 下一篇文章: 在桌面上画图 |
|
|
|
|