问题标签 [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.

0 投票
1 回答
1623 浏览

delphi - StretchDIBits 问题

我想在 32 位位图(或 Bitmap32)上传输 32 位图像(带 alpha 通道的 PNG)。

我不知道如何告诉函数混合图像而不是 bliting 它。就像使用 AlphaBlend 而不是 BitBlt 一样,我需要让这个函数混合图像而不是简单的 blit。

这是我的例子:

ABitmap 是 TBitmap32 (GR32) 的类型,但对于带有 32 位调色板的常规 TBitmap,结果相同。

FreeImage_GetBits 和 FreeImage_GetInfo 是 FreeImage 库函数,它们指向位数组的开头并指向结构。

我所做的 StretchDBit 不允许混合。

0 投票
1 回答
1531 浏览

c++ - StretchDIBits 仅在特定图像尺寸上失败

我正在使用StretchDIBits打印图像,并且由于某种未知原因图像处于特定尺寸时它会失败。

图像数据以 24 位 BGR 格式从其他一些图像源加载到无符号整数数组中。我已经验证了图像和缓冲区非常好,因为就像我说的那样,它可以在某些尺寸下工作,但根本不行。

我正在测试的当前尺寸是 638x1014。如果我将高度更改为 1013,它可以正常工作,但由于某种原因,如果它是 1014,它就会完全失败。

这里有一些代码向您展示如何设置:

StretchDIBits失败时返回零并且打印结果为空白页。

我对问题所在有一个模糊的概念,因为就像评论中所说的那样,如果我没有指定biSizeImage并将其保留为零,那么StretchDIBits将导致崩溃,因为它试图读取缓冲区的末尾。即便如此,我也不知道如何准确诊断它为什么会这样做,因为它适用于某些尺寸,但不适用于其他尺寸。

0 投票
1 回答
2036 浏览

windows - Windows StretchBlt API 性能

我计时了一个使用多个StretchBltStretchDIBits调用的 DDB 绘图操作。

我发现,完成时间与目标窗口大小成比例增加/减少。
使用 900x600 的窗口大约需要 5 毫秒,但使用 1920x1080 则需要 55 毫秒(源图像为 1280x640)。

似乎 Stretch.. API 不使用任何硬件加速功能。

源图像(实际上这是临时绘图画布)是使用创建的,CreateDIBSection因为我需要为绘制的每一帧生成(拉伸和合并)位图像素数据

让我们假设,Windows GDI 是没有希望的。那么有希望的替代方案是什么?

我考虑了使用 WIC 方法的 D3D、D2D(写入 WIC 位图并使用 D2D 绘制它,然后从 WIC 位图中读回像素数据)。
我打算用 WIC 方法尝试 D2D,因为我很快就会需要使用广泛的文本绘图功能。

但似乎 WIC 并没有那么有前途:WIC 位图处理最有效的像素格式是什么?

0 投票
0 回答
814 浏览

winapi - StretchDIBits win32 API 的替代品

我正在使用StretchDIBits函数将四个不同的位图像素数据(DIBits)绘制到窗口的不同部分。 StretchDIBits立即在窗口中显示复制的位。我想知道是否有一种方法可以推迟显示复制的位图的位,直到绘制完所有位图。

0 投票
1 回答
175 浏览

printing - MFC:如何将 DI 位图打印到打印机?

我正在使用 MFC 并尝试使用OnPrint()打印 DI 位图的内容。我知道如何获取我的位图,我知道如何到达::StretchDIBitDC,但要做到这一点,我需要知道纸张尺寸,并想说是否适合正常位图尺寸,只需使用它,如果太大,制作它更小。但是我从哪里获得页面大小?如何将我的 DI 位图宽度/高度与打印机页面的输出相关联?

将 发送::StretchDIBit到一些随机值进行测试:

打印出来的,但拉伸不成比例。如果我只是简单地将它发送到__super::OnPrint()它打印但非常小。我宁愿让它只使用OnDraw()which 输出到屏幕上,这就是__super::OnPrint()它的作用,但是我如何设置它以打印正确的大小和比例?

蒂亚!!

编辑:

根据下面的答案,它没有用。什么都没有打印。如果我在(不打印)上显示时使用了 MM_ISOTROPIC,则CView没有显示任何内容,所以我有条件地使用地图模式。这是完整的代码,包括CView窗口中支持的缩放。有什么遗漏/错误?

蒂亚!!

编辑:

所以我将IsPrinting上面的部分修改为:

有效!但是现在我不得不在另一个问题中询问位图和精度输出。