|
位图操作。获取DIB后对其数据进行操作实现旋转!!!!
[复制链接]
总算找到组织了!!
我最近在学习EVC下的位图操作。要实现位图的快速旋转。看了很多网上资料,很多事对DC中的像素进行操作的,实现的过程都很慢很慢,项目部能接受。
后来看到一些人说对DIB进行操作很快的实现,于是就模仿了一下,比像素操作时快了不少,但是还是有两个地方特别费时,百思不得其解,特此求教。
我是这样做的:
在内存DC:memDC中绘制东西,一般就是图片等内容。最后通过pdc->bitblt(0,0,w,h,memdc,0,0,srccopy);把东西绘制到屏幕。
现在我要在其中加入旋转,于是我先建立一个DIB并获得memDc中的数据,我是这样实现的:
HBITMAP hbitmap = createDIBSection(memDC.getsafehdc(),&bi,DIB_RGB_COLOR, (void **)&pbuffer, null,0);
其中,bi是先定义好了的位图信息结构BITMAPINFO,pbuffer是位图数据的地址指针。
再定义一个dc,选入这张刚创建的位图,hbitmap;
selectobject(dc.getsafehdc(),hbitmap);
然后给这个位图添加内容:
bitblt(dc.getsafehdc(),0,0,600,600,memdc.getsafehdc(),0,0,srccopy); 这句语句消耗大量的时间!!!!!!!!
就这样我获得了DIB数据的指针,就可以对其进行旋转的相关操作了。
之后再把旋转后的dib画回memDC中。
问题就是之前的拷贝数据的时候以及后来把DIB画回的时候都需要很长很长的时间,相对我的旋转算法长很多!!
请问是什么原因??
如果我避开这一步的话?怎么获得位图的数据进行旋转的操作呢?
时间紧迫请大家帮忙了
|
|