StretchDIBits在一些图像尺寸下失败

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

时间: 2024-10-14 00:37:43

StretchDIBits在一些图像尺寸下失败的相关文章

手机屏幕的分辨率和图像尺寸关系

手机屏幕的分辨率 320*480 ,图像尺寸72*72,正常显示.在 240*320 的屏幕分辨率下,图像尺寸是多少(缩放比率是多少)才会正常显示(不失真,不模糊)? 一般比你手机屏幕大的都没事,但是怎么保持比例,像320*480比例就是0.66,你做的图片,保持这个比例就行! 320/480=0.66啊就是这么算啊,下次你做图片就按这个比例来就好了,就不会变形,走样了 http://segmentfault.com/q/1010000000425073 手机切图 http://www.mobi

ps:图像尺寸

在课程#01中我们知道了显示器上的图像是由许多点构成的,这些点称为像素,意思就是"构成图像的元素".但是要明白一点:像素作为图像的一种尺寸,只存在于电脑中,如同RGB色彩模式一样只存在于电脑中.像素是一种虚拟的单位,现实生活中是没有像素这个单位的.在现实中我们看到一个人,你能说他有多少像素高吗?不能,通常我们会说他有1.82米高,或者182厘米等.所用的都是传统长度单位.所谓传统长度单位就是指毫米.厘米.分米.米.公里.光年这样的单位. 这时就有一个问题出现,比如那个1.82米高度的人

IOS7官方推荐图标和图像尺寸

图标和图像大小 每一个应用程序需要一个应用程序图标和启动图像.此外,一些应用程序需要自定义的图标来表示特定于应用程序的内容,功能,或在导航栏,工具栏和标签栏模式. 不像其他的定制艺术品在您的应用程序的图标和图像,表38-1列出必须满足特定的标准,因此,IOS可以正确显示.此外,一些图标和图像文件的命名要求.(如果你需要支持标准分辨率的iPhone或iPod touch设备,除以2下面列出高分辨率的大小.) 表38-1自定义图标和图像尺寸(像素) 描述 iPhone 5和iPod touch的尺寸

关于导航按钮在其他尺寸下显示问题

关于导航按钮在其他尺寸下显示问题1.Bootstrap第4177行@media (min-width: 768px) {  .navbar-header {    float: left;  }}修改为@media (min-width: 992px) {  .navbar-header {    float: left;  }}2.Bootstrap第4194行@media (min-width: 768px) {  .navbar-collapse {    width: auto;   

关于VS2013优化后MFC中对文件读取失败的解析(debug下可以,release下失败)

经测试: 错误来源于:如下程序,在vs2010下使用GetFileName(),文件可以成功读取,但在VS2013下,使用GetFileName()读取文件在debug下可以,但release下失败,改为GetPathName()后,便可以成功编译. CFileDialog filePCloudDlg(TRUE); filePCloudDlg.m_ofn.lpstrTitle=_T("选择点云文件"); filePCloudDlg.m_ofn.lpstrFilter=_T("

Opencv-Python:图像尺寸、图像的读取、显示、保存与复制

Opencv-Python:图像尺寸.图像的读取.显示.保存与复制 原创 2017年11月23日 21:30:49 4440 在使用opencv的方法时,首先必须导入opencv包.新的opencv导入cv2,这里也和cv做了一个对比 [python] view plain copy import cv2 一.图像尺寸 图像的大小可以通过其shape属性来获取,shape返回的是一个tuple元组,第一个元素表示图像的高度,第二个表示图像的宽度,第三个表示像素的通道数. 示例: [python]

图标和图像尺寸

http://deeper29.com/2015/04/29/icon-and-image-sizes/ 译文-原文来自苹果官方文件 每款App都需要一个APP图标,一个启动文件或者启动画面.不仅如此,一些APP需要自定义图标来表达APP的具体内容,功能或者导航栏,工具栏和标签栏的风格和app内其他的配图不同.表格41-1中的图标和图像必须符合一定的标准才能让显示效果达到最佳.而且,有些图标和图像是有命名上的要求的(如何给这些文件命令,请参考应用图标和应用启动画面) 表格41-1 尺寸图标和图像

IOS 获取网络图像尺寸 更改 图像色彩值 什么一套方法灰色

直接在代码 头文件 // 图片处理 0 半灰色 1 灰度 2 深棕色 3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelType:(UIImageGrayLevelType)type; //色值 变暗多少 0.0 - 1.0 +(UIImage*)imageWithImage:(UIImage*)image darkValue:(float)darkValue; /** 获取网络图片的Size, 先通过文件头来获取图片大小 假设失败

iOS下载图片之前获取网络图片尺寸的失败尝试

最近一直在找获取网络图片的size的方式,最后得出两个结论: 1 使用分线程下载下来,然后获得图片的size 2 使用网络请求图片的头文件,然后从头文件中找到图片大小的信息 第一种方法需要主线程分线程切换,因为在使用tableView来reloadData的时候,刷表老是出问题,先放着不管 然后我重点是想搞一下第二个方法: 在网上找到了一个博客:http://cxjwin.github.io/2013/11/05/preview_image_size/ 大神写的很不错 主要思路就是先在网上找一个