StretchDIBits
用来打印图像,但是由于某种未知的原因,当图像达到特定尺寸时,它会失败。
图像数据从其他一些图像源以24位BGR格式加载到无符号int数组中。它可以在某些大小下工作,但根本无法工作。
正在测试的当前尺寸为638x1014。如果将高度更改为1013,则可以正常工作,但由于某种原因,如果高度为1014,则会失败。
unsigned int * buffer = new unsigned int[width * height * 3]; // Fill buffer with image data... BITMAPINFOHEADER bi = { 0 }; bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = width; bi.biHeight = height; bi.biPlanes = 1; bi.biBitCount = 24; bi.biCompression = BI_RGB; bi.biSizeImage = width * height * 3; // Specifying this value because if I don't it will crash trying to read outside of the buffer. StartPage(hdcPrint); SetMapMode(hdcPrint, MM_ISOTROPIC); SetWindowExtEx(hdcPrint, width, height, NULL); SetViewportExtEx(hdcPrint, width, height, NULL); SetViewportOrgEx(hdcPrint, 0, 0, NULL); StretchDIBits(hdcPrint, 0, 0, width, width, 0, 0, width, height, buffer, (BITMAPINFO *) &bi, DIB_RGB_COLORS, SRCCOPY);
StretchDIBits
失败且打印结果为空白页时返回零
原因: 图像宽度是错误的字节数。Windows要求每一行都是4字节的倍数;638*3
是1914,这是2个字节(3是RGB,代表红绿蓝三个字节的像素)
除了行中的最后一个像素,每个像素应该为3个字节。宽度应为1916,而不是1914,因为1916均匀地除以4,而1914则不。
解决方法: 用合适的图像宽度,可以被4整除的
原文链接: https://www.cnblogs.com/strive-sun/p/12188277.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/405008
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!