使用gdi的免费绘图-alpha颜色问题



我允许用户在表单上绘制。当我的应用程序甚至按下鼠标时,我就开始了。当它启动鼠标事件时,我就结束了。我绘制鼠标移动事件。

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将位图绘制到目标中。

最新更新