问题标签 [gdi]

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 投票
2 回答
4211 浏览

mfc - 未重绘 WS_EX_TRANSPARENT 样式的静态控件

我正在尝试创建一个在绘制 32 位位图时实现每像素 alpha 混合的控件。

我扩展了 CWnd 并在资源编辑器中使用静态控件。我设法正确地绘制了 alpha 通道,但静态控件仍然继续绘制灰色背景。

我覆盖了 OnEraseBkgnd 以防止控件绘制背景,但它没有用。我终于设法通过使用 WS_EX_TRANSPARENT 做到了。

我现在的问题是我的控制权置于其他控制权之上。第一次绘制对话框时一切正常……但如果我单击“父”控件(即我控制下的那个),我的控件不会收到 WM_PAINT 消息。所以不再画了。

如果我最小化应用程序并再次最大化它,则再次绘制控件。

拜托,谁能给个提示?我对这个控制感到疯狂!!!

谢谢。

0 投票
2 回答
431 浏览

c# - 带有图标的 GDI 句柄。l

我有一个winforms 应用程序。我有一个带有很多图标的用户控件。用户可以在表单上多次加载此控件(在选项卡式布局中)。现在我每次创建控件时都在加载图标(在应用程序中可能高达 50 次)。有没有办法在应用程序中缓存这些图标。如果我这样做,会减少我正在使用的 gdi 句柄的数量,因为这已成为一个问题。

0 投票
1 回答
6654 浏览

c++ - C++/Win32:如何从 HBITMAP 中获取 alpha 通道?

我有一个HBITMAP包含 alpha 通道数据。我可以使用::AlphaBlendGDI 函数成功渲染它。

但是,当我调用::GetPixelGDI 函数时,我永远不会返回带有 alpha 分量的值。文档确实说它返回像素的 RGB 值。

有没有办法检索像素中的 alpha 通道值HBITMAP

我希望能够检测何时使用 ::AlphaBlend,以及何时使用老式方法将源 HBITMAP 中的特定颜色视为透明。



回答

使用 GetDIBits 检索图像的第一条(或更多条)扫描线:

0 投票
2 回答
14103 浏览

c++ - 如何从 HBITMAP 创建 Gdiplus::Bitmap,保留 alpha 通道信息?

当我使用 Bitmap::FromHBITMAP 函数创建一个新的 Gdiplus::Bitmap 时,生成的位图是不透明的 - 原始 HBITMAP 的部分透明度没有被保留。

有没有办法从 HBITMAP 创建一个 Gdiplus::Bitmap ,它带来了 alpha 通道数据?

0 投票
2 回答
10234 浏览

c++ - 将 hdc 内容复制到位图

如何将 HDC 的内容复制到位图?

0 投票
1 回答
1881 浏览

gdi+ - GDI+到GDI之间转换的奇怪问题:Bitmap和HBitmap

我想将 gdi+ Bitmap 转换为 gdi 对象 HBitmap。

我正在使用以下方法:

img 对象正在对话框上绘制。当这部分方法被调用时,奇怪的事情发生了!窗口中显示的img改变了!它变得更清晰或更锐利。我的问题是会发生什么?

0 投票
1 回答
548 浏览

gdi - 如何设置 GDI HDC 的可绘制区域?

我想在 HDC 上绘制 HBITMAP,

我使用了 StretchDIBits。它工作正常。::拉伸DIBits。

但是,我只想要一个窗口来观看绘图结果,在窗口旁边,我希望stretchDIBits不生效(它不能在其他区域上绘制),我该怎么做?

0 投票
2 回答
1546 浏览

delphi - 设置 Canvas.LineTo 的线端样式

有没有办法为 TCanvas.LineTo 方法设置线端的样式?它似乎默认为圆形末端,当 Pen.Width 设置为较大的值(例如 9)时,对于一行不同颜色的几行来说,这看起来非常糟糕。

它看起来像这样(圆形末端):

(其中 * 是蓝色,. 是黄色)

如果在中间线之后画两条外线,那就更糟了:

我希望它看起来像这样(直线结束):

Pen 似乎没有为此提供任何设置,LineTo 方法也没有。是否有我可以调用的 Windows API 函数?

0 投票
2 回答
1466 浏览

c++ - GDI+ 抖动问题

我有一个使用适用于 Windows 的 Win32 API 的 C++ 应用程序,当我不知道为什么会这样时,我遇到了 GDI+ 抖动问题。

我有一个自定义控件(自​​定义窗口)。当我收到 WM_PAINT 消息时,我在图形设备上使用 FillPolygon 绘制了一些多边形。此图形设备是使用 BeginPaint 的 HDC 创建的。

但是,当多边形出现在屏幕上时,它们会抖动而不是透明,并且似乎只显示很少的颜色(可能是 256 种?)让我想知道发生了什么。

我没有做任何特别的事情,据我所知,这是一个应该可以正常工作的简单示例。难道我做错了什么?

编辑:没关系。它只发生在远程桌面上,即使 C# 示例没有在远程桌面上抖动。远程桌面设置为 32 位颜色,所以我不知道这是怎么回事。

0 投票
1 回答
544 浏览

gdi - 如何通过 StretchDIBits 模仿缩略图周围的阴影?

我现在正在编写一个图像查看器,它用于查看缩略图。由于它很丑,我决定画阴影圆形缩略图。

有背景色。我正在使用 StretchDIBits 在缩略图的位置绘制阴影图像。然而,它覆盖了背景颜色真的很烦人......当背景是白色时,它看起来很完美。但如果背景不是白色的,它有一个白色的边框。

所以我使用 AlphaBlend,首先将阴影图像绘制到 DC 上,然后使用 AlphaBlend 到背景上。但是,我仍然可以看到白色边框。

不管背景是什么,有什么理由要生成完美的阴影。