收藏 分享(赏)

BMP图像缩放 函数.doc

上传人:buyk185 文档编号:6031299 上传时间:2019-03-25 格式:DOC 页数:4 大小:46KB
下载 相关 举报
BMP图像缩放 函数.doc_第1页
第1页 / 共4页
BMP图像缩放 函数.doc_第2页
第2页 / 共4页
BMP图像缩放 函数.doc_第3页
第3页 / 共4页
BMP图像缩放 函数.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、ZoomDIB() 该函数用来缩放 DIB 图像,返回新生成 DIB 的句柄1. /* 2. * 3. * 函数名称: 4. * ZoomDIB() 5. * 6. * 参数: 7. * LPSTR lpDIB - 指向源 DIB 的指针 8. * float fXZoomRatio - X 轴方向缩放比率 9. * float fYZoomRatio - Y 轴方向缩放比率 10. * 11. * 返回值: 12. * HGLOBAL - 缩放成功返回新 DIB 句柄,否则返回 NULL。 13. * 14. * 说明: 15. * 该函数用来缩放 DIB 图像,返回新生成 DIB 的句柄。

2、 16. * 17. */ 18. 19. HGLOBAL WINAPI ZoomDIB(LPSTR lpDIB, float fXZoomRatio, float fYZoomRatio) 20. 21. 22. / 源图像的宽度和高度 23. LONG lWidth; 24. LONG lHeight; 25. 26. / 缩放后图像的宽度和高度 27. LONG lNewWidth; 28. LONG lNewHeight; 29. 30. / 缩放后图像的宽度 31. LONG lNewLineBytes; 32. 33. / 指向源图像的指针 34. LPSTR lpDIBBits;

3、 35. 36. / 指向源象素的指针 37. LPSTR lpSrc; 38. 39. / 缩放后新 DIB 句柄 40. HDIB hDIB; 41. 42. / 指向缩放图像对应象素的指针 43. LPSTR lpDst; 44. 45. / 指向缩放图像的指针 46. LPSTR lpNewDIB; 47. LPSTR lpNewDIBBits; 48. 49. / 指向 BITMAPINFO 结构的指针 50. LPBITMAPINFOHEADER lpbmi; 51. 52. / 指向 BITMAPCOREINFO 结构的指针 53. LPBITMAPCOREHEADER lpbm

4、c; 54. 55. / 循环变量 56. LONG i; 57. LONG j; 58. 59. / 象素在源 DIB 中的坐标 60. LONG i0; 61. LONG j0; 62. 63. / 图像每行的字节数 64. LONG lLineBytes; 65. 66. / 找到源 DIB 图像象素起始位置 67. lpDIBBits = :FindDIBBits(lpDIB); 68. 69. / 获取图像的宽度 70. lWidth = :DIBWidth(lpDIB); 71. 72. / 计算图像每行的字节数 73. lLineBytes = WIDTHBYTES(lWidth

5、 * 8); 74. 75. / 获取图像的高度 76. lHeight = :DIBHeight(lpDIB); 77. 78. / 计算缩放后的图像实际宽度 79. / 此处直接加 0.5 是由于强制类型转换时不四舍五入,而是直接截去小数部分 80. lNewWidth = (LONG) (:DIBWidth(lpDIB) * fXZoomRatio + 0.5); 81. 82. / 计算新图像每行的字节数 83. lNewLineBytes = WIDTHBYTES(lNewWidth * 8); 84. 85. / 计算缩放后的图像高度 86. lNewHeight = (LONG)

6、 (lHeight * fYZoomRatio + 0.5); 87. 88. / 分配内存,以保存新 DIB 89. hDIB = (HDIB) :GlobalAlloc(GHND, lNewLineBytes * lNewHeight + *(LPDWORD)lpDIB + :PaletteSize(lpDIB); 90. 91. / 判断是否内存分配失败 92. if (hDIB = NULL) 93. 94. / 分配内存失败 95. return NULL; 96. 97. 98. / 锁定内存 99. lpNewDIB = (char * ):GlobalLock(HGLOBAL)

7、 hDIB); 100. 101. / 复制 DIB 信息头和调色板 102. memcpy(lpNewDIB, lpDIB, *(LPDWORD)lpDIB + :PaletteSize(lpDIB); 103. 104. / 找到新 DIB 象素起始位置 105. lpNewDIBBits = :FindDIBBits(lpNewDIB); 106. 107. / 获取指针 108. lpbmi = (LPBITMAPINFOHEADER)lpNewDIB; 109. lpbmc = (LPBITMAPCOREHEADER)lpNewDIB; 110. 111. / 更新 DIB 中图像的

8、高度和宽度 112. if (IS_WIN30_DIB(lpNewDIB) 113. 114. / 对于 Windows 3.0 DIB 115. lpbmi-biWidth = lNewWidth; 116. lpbmi-biHeight = lNewHeight; 117. 118. else 119. 120. / 对于其它格式的 DIB 121. lpbmc-bcWidth = (unsigned short) lNewWidth; 122. lpbmc-bcHeight = (unsigned short) lNewHeight; 123. 124. 125. / 针对图像每行进行操作 126. for(i = 0; i = 0) 146. 147. / 复制象素 148. *lpDst = *lpSrc; 149. 150. else 151. 152. / 对于源图中没有的象素,直接赋值为 255 153. * (unsigned char*)lpDst) = 255; 154. 155. 156. 157. 158. 159. 160. / 返回 161. return hDIB; 162.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报