是否可以从图像创建光标并使其半透明?
我目前正在拍摄自定义图像,并且正在处理鼠标光标图像。如果我可以使这个半透明,但不是必要的,那将是很好的。销售人员喜欢闪亮。
目前正在做这样的事情:
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());
答案 0 :(得分: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);
}
我把它放在按钮点击事件上(你可以从你喜欢的地方打电话):
Bitmap b = new Bitmap("D:/Up.png");
this.Cursor = CreateCursor(b, 5, 5);
在AdobePhotoshop中,Up.png图像以75%的不透明度保存。
答案 1 :(得分:0)
在我的头顶(我会先试试):
你应该有漂亮的半透明位图。
如果性能允许,您可以扫描完全透明的像素并将A设置为零!
答案 2 :(得分:0)
如果要“动态”设置自定义鼠标光标位图的透明度,您可能会发现此功能很有用。它使用颜色矩阵来设置任何给定位图的透明度,并返回修改后的位图。为了获得透明度, TranspFactor 应介于225和245之间,只需尝试一下即可。 (您需要导入System.Drawing和System.Drawing.Imaging)
public static Bitmap GetBMPTransparent(Bitmap bmp, int TranspFactor)
{
Bitmap transpBmp = new Bitmap(bmp.Width, bmp.Height);
using (ImageAttributes attr = new ImageAttributes()) {
ColorMatrix matrix = new ColorMatrix { Matrix33 = Convert.ToSingle(TranspFactor / 255) };
attr.SetColorMatrix(matrix);
using (Graphics g = Graphics.FromImage(transpBmp)) {
g.DrawImage(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, attr);
}
}
return transpBmp;
}
答案 3 :(得分:-2)
这很容易,我不使用API。
代码是
Bitmap img = new Bitmap(new Bitmap(@"image.png"), 30, 30); //this is the size of cursor
Icon icono = Icon.FromHandle(img.GetHicon()); //create the Icon object
Cursor = new Cursor(icono.Handle); //the icon Object has the stream to create a Cursor.
我希望这是你的解决方案