自定义光标 - 颜色问题

时间:2015-01-07 22:54:52

标签: c# winforms cursor

我遇到的问题是自定义光标中的颜色有时无法正确显示。

我有一个Windows窗体应用程序,其中一个窗体上有一个PictureBox控件。当图像加载到该PictureBox并且鼠标移动到该控件上时,我想显示自定义光标。这个光标有点不寻常,因为对于每个加载到PictureBox中的图像,都有另一个相关的图像,当用户将鼠标指针移到PictureBox控件上时,我希望光标是一个正方形,并且在该正方形内我希望它显示来自相关图像的相应像素。在某些限制内,用户可以更改光标的大小。

原则上我几乎可以使用它。当然,在任何给定的点上,光标显示相关图像的右侧部分,并且当我移动指针时它会正确更新。

问题是光标中显示的颜色并不总是正确的。他们在正确的球场:红色的阴影总是显示为红色阴影,例如,不一定是正确的阴影。有时光标颜色看起来稍暗,有时则稍微亮一些。我注意到,对于任何颜色,其中R,G和B三个组件都是0或255的组合,颜色总是看起来正确。

此外,仅当光标为64x64像素正方形或更小时才会发生这种情况。如果用户将光标的大小增加到超过该点,问题就会消失,但如果光标大小稍后减小到64x64或更小,它将重新出现。

这是完成工作的代码。 X和Y来自MouseMove事件。 CursorSize是一个表单范围的int变量,它以像素为单位保存光标的大小(总是一个偶数),而imgAssoc是一个表格范围的Image变量,相关图像被加载到该变量中。 picMain是PictureBox控件。

    private void LoadCursorFromBitmap(int X, int Y)
    {
        int halfSize = CursorSize / 2;

        // The new cursor image is a [CursorSize] x [CursorSize] pixel square.
        using (Bitmap bmp = new Bitmap(CursorSize, CursorSize))
        {
            using (Graphics g = Graphics.FromImage(bmp))
            {
                // Create a [CursorSize] x [CursorSize] pixel square, centered on the X and Y co-ordinates.
                Rectangle square = new Rectangle(X - halfSize, Y - halfSize, CursorSize, CursorSize);

                // Copy the square section of the image to the bitmap.
                g.DrawImage(imgAssoc, 0, 0, square, GraphicsUnit.Pixel);

                // Draw a line around the edge of the bitmap.
                using (Pen pen = new Pen(Color.FromArgb(64, Color.Black), 1F))
                {
                    g.DrawRectangle(pen, 0, 0, CursorSize - 1, CursorSize - 1);
                }
            }

            picMain.Cursor = new Cursor(bmp.GetHicon());
        }
    }

任何想法如何解决这个问题?

0 个答案:

没有答案