我遇到的问题是自定义光标中的颜色有时无法正确显示。
我有一个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());
}
}
任何想法如何解决这个问题?