标签: stretchdibits

StretchDIBits似乎很慢,有没有更快的API?

我想画一个相同大小的HDC.我正在使用:des和src的大小相同.

   ::StretchDIBits(hdc,
                des.left,des.top,des.right - des.left,des.bottom - des.top,
                src.left, GetHeight() - src.bottom, src.right - src.left,src.bottom - src.top,
                m_pImg->accessPixels(),m_pImg->getInfo(), DIB_RGB_COLORS, SRCCOPY);
Run Code Online (Sandbox Code Playgroud)

但我发现它很慢,因为des尺寸相同,我只需要将dib复制到dc上.有没有比StretchDIBits更快的方法?

就像

StretchBlt (slow)  vs  Bitblt.(faster)
StretchDIBits (slow ) vs ?(faster)
Run Code Online (Sandbox Code Playgroud)

performance gdi stretchdibits

5
推荐指数
1
解决办法
5412
查看次数

如何使用LoadImage和StretchDIBits绘制PNG图像?

(这与如何使用Win32/GDI加载PNG图像的问题有关(如果可能,没有GDI +)?)

大家好,

我想知道,鉴于你有一个PNG资源嵌入带有ID的二进制文件中IDB_PNG1,并且LPDRAWITEMSTRUCT要绘制(这意味着你有HDC目标的矩形和矩形),你如何使用这个图像绘制到屏幕上StretchDIBits?我曾经BitBltTransparentBlt以前StretchDIBits一起工作,但似乎工作方式不同,LoadImage似乎不适用于PNG.

谢谢!

(注意:我使用的语言是C++,但这并不太重要...... C,C#,Visual Basic等都没问题;我只是想弄清楚步骤,而不是确切的代码.)

c++ png gdi image stretchdibits

3
推荐指数
1
解决办法
1万
查看次数

Windows StretchBlt API性能

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

我发现,完成时间与目标窗口大小成比例地增加/减少.
使用900x600窗口需要大约5ms,但是对于1920x1080,它需要大约55ms(源图像是1280x640).

看来Stretch .. API不使用任何硬件加速功能.

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

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

我考虑使用WIC方法的D3D,D2D(写入WIC位图并使用D2D绘制它然后从WIC位图读回像素数据).
我计划用WIC方法尝试D2D,因为我需要很快使用大量的文本绘图功能.

但似乎WIC并不那么有希望:WIC位图处理最有效的像素格式是什么?

windows direct3d wic stretchdibits direct2d

3
推荐指数
1
解决办法
1500
查看次数

StretchDIBits仅在特定图像尺寸下失败

我正在使用StretchDIBits打印图像,当图像由于某种未知原因而处于特定大小时,它会失败.

图像数据从24位BGR格式的某些其他图像源加载到unsigned 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, …
Run Code Online (Sandbox Code Playgroud)

c++ windows crash gdi stretchdibits

1
推荐指数
1
解决办法
1247
查看次数

标签 统计

stretchdibits ×4

gdi ×3

c++ ×2

windows ×2

crash ×1

direct2d ×1

direct3d ×1

image ×1

performance ×1

png ×1

wic ×1