问题标签 [stretchdibits]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - StretchDIBits 问题
我想在 32 位位图(或 Bitmap32)上传输 32 位图像(带 alpha 通道的 PNG)。
我不知道如何告诉函数混合图像而不是 bliting 它。就像使用 AlphaBlend 而不是 BitBlt 一样,我需要让这个函数混合图像而不是简单的 blit。
这是我的例子:
ABitmap 是 TBitmap32 (GR32) 的类型,但对于带有 32 位调色板的常规 TBitmap,结果相同。
FreeImage_GetBits 和 FreeImage_GetInfo 是 FreeImage 库函数,它们指向位数组的开头并指向结构。
我所做的 StretchDBit 不允许混合。
c++ - StretchDIBits 仅在特定图像尺寸上失败
我正在使用StretchDIBits
打印图像,并且由于某种未知原因图像处于特定尺寸时它会失败。
图像数据以 24 位 BGR 格式从其他一些图像源加载到无符号整数数组中。我已经验证了图像和缓冲区非常好,因为就像我说的那样,它可以在某些尺寸下工作,但根本不行。
我正在测试的当前尺寸是 638x1014。如果我将高度更改为 1013,它可以正常工作,但由于某种原因,如果它是 1014,它就会完全失败。
这里有一些代码向您展示如何设置:
StretchDIBits
失败时返回零并且打印结果为空白页。
我对问题所在有一个模糊的概念,因为就像评论中所说的那样,如果我没有指定biSizeImage
并将其保留为零,那么StretchDIBits
将导致崩溃,因为它试图读取缓冲区的末尾。即便如此,我也不知道如何准确诊断它为什么会这样做,因为它适用于某些尺寸,但不适用于其他尺寸。
windows - Windows StretchBlt API 性能
我计时了一个使用多个StretchBlt
和StretchDIBits
调用的 DDB 绘图操作。
我发现,完成时间与目标窗口大小成比例增加/减少。
使用 900x600 的窗口大约需要 5 毫秒,但使用 1920x1080 则需要 55 毫秒(源图像为 1280x640)。
似乎 Stretch.. API 不使用任何硬件加速功能。
源图像(实际上这是临时绘图画布)是使用创建的,CreateDIBSection
因为我需要为绘制的每一帧生成(拉伸和合并)位图像素数据。
让我们假设,Windows GDI 是没有希望的。那么有希望的替代方案是什么?
我考虑了使用 WIC 方法的 D3D、D2D(写入 WIC 位图并使用 D2D 绘制它,然后从 WIC 位图中读回像素数据)。
我打算用 WIC 方法尝试 D2D,因为我很快就会需要使用广泛的文本绘图功能。
但似乎 WIC 并没有那么有前途:WIC 位图处理最有效的像素格式是什么?
winapi - StretchDIBits win32 API 的替代品
我正在使用StretchDIBits
函数将四个不同的位图像素数据(DIBits)绘制到窗口的不同部分。
StretchDIBits
立即在窗口中显示复制的位。我想知道是否有一种方法可以推迟显示复制的位图的位,直到绘制完所有位图。
printing - MFC:如何将 DI 位图打印到打印机?
我正在使用 MFC 并尝试使用OnPrint()
打印 DI 位图的内容。我知道如何获取我的位图,我知道如何到达::StretchDIBit
DC,但要做到这一点,我需要知道纸张尺寸,并想说是否适合正常位图尺寸,只需使用它,如果太大,制作它更小。但是我从哪里获得页面大小?如何将我的 DI 位图宽度/高度与打印机页面的输出相关联?
将 发送::StretchDIBit
到一些随机值进行测试:
打印出来的,但拉伸不成比例。如果我只是简单地将它发送到__super::OnPrint()
它打印但非常小。我宁愿让它只使用OnDraw()
which 输出到屏幕上,这就是__super::OnPrint()
它的作用,但是我如何设置它以打印正确的大小和比例?
蒂亚!!
编辑:
根据下面的答案,它没有用。什么都没有打印。如果我在(不打印)上显示时使用了 MM_ISOTROPIC,则CView
没有显示任何内容,所以我有条件地使用地图模式。这是完整的代码,包括CView
窗口中支持的缩放。有什么遗漏/错误?
蒂亚!!
编辑:
所以我将IsPrinting
上面的部分修改为:
有效!但是现在我不得不在另一个问题中询问位图和精度输出。