从图像创建半透明光标

Dus*_*oks 9 c# transparency cursor winforms

是否可以从图像创建光标并使其半透明?

我目前正在拍摄自定义图像并将鼠标光标图像传送完毕.如果我可以使这个半透明,但不是必要的,那将是很好的.销售人员喜欢闪亮.

目前做这样的事情:

Image cursorImage = customImage.GetThumbnailImage(300, 100, null, IntPtr.Zero);
cursorImage.SetResolution(96.0F, 96.0F);
int midPointX = cursorImage.Width / 2;
int midPointY = cursorImage.Height / 2;
Bitmap cursorMouse = GetCursorImage(cursorOverlay);
Graphics cursorGfx = Graphics.FromImage(cursorImageCopy);
cursorGfx.DrawImageUnscaled(cursorMouse, midPointX, midPointY);

Cursor tmp = new Cursor(cursorImage.GetHicon());
Run Code Online (Sandbox Code Playgroud)

alt text http://members.cox.net/dustinbrooks/drag.jpg

小智 6

我试过以下示例,它工作得很好......

    public struct IconInfo
    {
        public bool fIcon;
        public int xHotspot;
        public int yHotspot;
        public IntPtr hbmMask;
        public IntPtr hbmColor;
    }


    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool GetIconInfo(IntPtr hIcon, ref IconInfo pIconInfo);

    [DllImport("user32.dll")]
    public static extern IntPtr CreateIconIndirect(ref IconInfo icon);

    public static Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot)
    {
        IntPtr ptr = bmp.GetHicon();
        IconInfo tmp = new IconInfo();
        GetIconInfo(ptr, ref tmp);
        tmp.xHotspot = xHotSpot;
        tmp.yHotspot = yHotSpot;
        tmp.fIcon = false;
        ptr = CreateIconIndirect(ref tmp);
        return new Cursor(ptr);
    }
Run Code Online (Sandbox Code Playgroud)

我把它放在按钮点击事件上(你可以从你喜欢的地方打电话):

Bitmap b = new Bitmap("D:/Up.png");
this.Cursor = CreateCursor(b, 5, 5);
Run Code Online (Sandbox Code Playgroud)

在AdobePhotoshop中,Up.png图像以75%的不透明度保存.