支持缩放的浏览器解决方法
发布时间:2011-06-27 20:39:47 文章来源:www.iduyao.cn 采编人员:星星草
支持缩放的浏览器
我用StretchBlt函数做了一个DC缩放的函数,现在还没有限定缩放极限就是试了一下速度,代码如下。
void PictureZoom(HDC hdc, float fZoomRatio)
{
if (fZoomRatio == 1)
return ;
static float fCurRatio = 0;
HDC BufferDC = CreateCompatibleDC(hdc);
HBITMAP BufferDCBmp = CreateCompatibleBitmap(hdc, g_dwScreenWidth, g_dwScreenHeight);
SelectObject(BufferDC, BufferDCBmp);
if (!g_hSrcPicDC) //当一张新图片进行缩放时
{
RECT rc;
HDC tempDC = CreateCompatibleDC(hdc);
HBITMAP tempDCBmp = SHLoadImageFile(g_cDlist.m_pCurNode->szFilePath);
SelectObject(tempDC, tempDCBmp);
g_hSrcPicDC = CreateCompatibleDC(hdc);
g_hSrcPicDCBmp = CreateCompatibleBitmap(hdc, g_dwScreenWidth, g_dwScreenHeight);
SelectObject(g_hSrcPicDC, g_hSrcPicDCBmp);
BitBltByScale(g_hSrcPicDC, g_dwScreenWidth, g_dwScreenHeight, tempDC, g_cDlist.m_pCurNode->Width, g_cDlist.m_pCurNode->Height, &rc);
//初始化当前显示区域
g_drawRc.left = 0;
g_drawRc.top = 0;
g_drawRc.right = g_dwScreenWidth;
g_drawRc.bottom = g_dwScreenHeight;
if (tempDC)
DeleteDC(tempDC);
if (tempDCBmp)
DeleteObject(tempDCBmp);
}
//计算缩放后的显示区域, 放大时显示区域是缩小,缩小时显示区域是放大
RECT tempRc = {g_drawRc.left, g_drawRc.top, g_drawRc.right, g_drawRc.bottom};
tempRc.right = tempRc.right / fZoomRatio;
tempRc.bottom = tempRc.bottom / fZoomRatio;
tempRc.left = g_dwScreenWidth / 2 - tempRc.right / 2;
tempRc.top = g_dwScreenHeight / 2 - tempRc.bottom / 2;
CopyRect(&g_drawRc, &tempRc);
StretchBlt(BufferDC, 0, 0, g_dwScreenWidth, g_dwScreenHeight,
g_hSrcPicDC, g_drawRc.left, g_drawRc.top, g_drawRc.right, g_drawRc.bottom, SRCCOPY);
if (g_dwFlags & STATE_MENU_BTN)
DrawMenuBtn(BufferDC);
BitBlt(hdc, 0, 0, g_dwScreenWidth, g_dwScreenHeight, BufferDC, 0, 0, SRCCOPY);
g_dwFlags |= STATE_ZOOM;
CLEAN:
if (BufferDC)
DeleteDC(BufferDC);
if (BufferDCBmp)
DeleteObject(BufferDCBmp);
}
速度不是很流畅,请问有其它比较快速 流畅的方式吗
(WIN32)
------解决方案--------------------
要使用快的算法,你的自己写缩放算法,而不是使用API,并且的使用ASM优化
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
关于opengl源码的问题
gluPickMatrix函数的实现在哪?我在glut源码中找了半天没有找到
------解决方案--------------------
这是...
-
关于傅立叶变换的数字水印嵌入算法的问题
需求:
首先对图像和水印图像进行傅里叶变换;
讲数字水印嵌入到图像中;
逆变换显示潜入水印...
-
Matlab和OpenCV的处理速度问题
大家好!我正准备用Windows下的OPENCV实现MSR算法来处理图像,目前已经有在Matlab下面的处理的程序,但...
-
问一个Ghostscript的问题!
我用Ghostscript API将eps转换成pdf,在其他的环境下都能很好的执行。但是在windows server 2008上却不行...
-
求教D3D9.DLL为什么没有被游戏进程加载?
我本来想wrap一下D3D9.DLL给一个3D游戏搞点破坏,但用IcdSword监视一下游戏使用模块,发现连D...
-
请教几个DirectX的问题
1:切线贴图就是法线贴图的意思么?
如果不是,那两者有什么区别?
2:The NPatch mode segments 是什么意思?
原文:
...
-
用OpenCV作的一个车牌识别程序
新手用OpenCV作的一个车牌识别程序,目前只能处理黄底黑字
的车牌图像,供大家交流学习之用。如果感...
-
求助:用matlab实现图像的dct变换
如题
用matlab实现图像的dct变换
不要用自带的dct2函数
多谢了
------解决方案----------------...
-
建了一个群,OCR字符识别技术,欢迎大家加入!
欢迎大家讨论各种字符的识别技术,从图像的预处理到最后分类识别的过程都可以讨论。
qq...
-
Matlab下怎么才能把封闭曲线作为边界判断区域内外
大家好!我对一幅图进行边缘分割,得到了边缘(是一条曲线),下一步想要用得到的边缘曲...