使用gdi的免费绘图-alpha颜色问题
Free drawing using gdi - Issue with alpha color
我允许用户在表单上绘制。当我的应用程序甚至按下鼠标时,我就开始了。当它启动鼠标事件时,我就结束了。我绘制鼠标移动事件。
I.E在鼠标按下事件中,我得到起点。然后在mousemove中我检查,如果鼠标仍然向下,那么我根据鼠标的位置绘制。我使用DrawLine函数绘制。我保存上一个点并绘制到我在mousemove中得到的新点。假设鼠标从P1(x1,y1),P2(x2,y2),P3(x3,y3)移动,那么我有一条从P1到P2到P3的线。一切正常。当我用透明颜色绘制时(例如Alpha为100),问题就开始了。当我这样做的时候,P2会被画两次。第一次当从p1到p2绘制线时,第二次当从p2到p3绘制线时。
当Alpha为255时,你看不到它,因为当你重写它时,p2的颜色不会改变。它保持笔的颜色。当用不等于255的alpha覆盖时,每次覆盖时,颜色都会变暗,看起来像线内的小点。
我附上了截图,所以你会看到问题:https://i.stack.imgur.com/7vA0k.png有没有办法画出没有点的线?不要忘记,这条线上可能有很多点,这是自由绘制的,所以这条线不是直的。您在行中看到的每个点都是在每次调用mousemove时创建的。
一种明显的可能性是将没有透明度的整条线(从起点到当前点)绘制成屏幕外位图。
然后将位图中每个像素的alpha通道设置为所需值(例如,100)。
最后,使用AlphaBlend将位图绘制到目标中。
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 列表视图更改选择颜色
- GtkTreeView 交替行颜色
- dx11 渲染到纹理仅显示透明颜色
- 使用 OpenGL 4.5 更改所选顶点的颜色
- 为什么我的 LEGACY OPENGL 颜色反转了?
- 双击更改 mfc 中列表控件中的行的颜色
- 更改 QT 中按钮的颜色
- 当我使用CHAR_INFO结构时,控制台会无缘无故地改变颜色
- 列表视图项的替代颜色
- GLSL 将 uint 转换为浮点颜色
- std::带有颜色和标题的 clog 包装器无法正确打印整数
- Vec3b:r/g/b 颜色的最大值为 254,而不是 255
- 如何检查流中文件的下一个单词是否为 alpha?
- 使用gdi的免费绘图-alpha颜色问题
- 更改DWORD颜色alpha通道值
- 带alpha的WebP会丢失颜色通道数据