2009-02-05 38 views
8

Có thể tạo con trỏ từ hình ảnh và có hình nửa trong suốt không?Tạo con trỏ nửa trong suốt từ hình ảnh

Tôi hiện đang chụp ảnh tùy chỉnh và xếp chồng hình ảnh con trỏ chuột. Nó sẽ là tuyệt vời nếu tôi có thể làm cho bán trong suốt này, nhưng không cần thiết. Những người bán hàng yêu thích sáng bóng.

Hiện nay làm một cái gì đó như thế này:

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()); 

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

Trả lời

5

Tôi đã thử ví dụ sau, và nó đã làm việc tốt ...

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); 
    } 

Và tôi đã đặt này về sự kiện nút bấm (bạn có thể gọi từ nơi mà bạn muốn):

Bitmap b = new Bitmap("D:/Up.png"); 
this.Cursor = CreateCursor(b, 5, 5); 

Và hình ảnh Up.png được lưu với độ mờ 75% trong AdobePhotoshop.

0

Trên đỉnh đầu của tôi (tôi sẽ cố gắng mà lần đầu tiên):

  1. tạo bitmap mới với cùng một kích thước như ban đầu , nhưng với cấu trúc ARGB
  2. drawimage: bitmap hiện tại sang bitmap mới
  3. truy cập dữ liệu bitmap thô và thay thế A byte bằng 128

Bạn nên có bitmap bán trong suốt tốt đẹp ở đó.

Nếu hiệu suất cho phép, bạn có thể quét các pixel hoàn toàn trong suốt và đặt A thành 0 cho chúng!

-2

điều đó rất dễ dàng, tôi không sử dụng API.

mã là

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. 

Tôi hy vọng đó là giải pháp của bạn

+1

-1 Không làm cho nó bán trong suốt. – quantum

+0

-1 Ngoài ra, không cho phép đặt vị trí điểm phát sóng. – takrl

0

Nếu bạn muốn thiết lập tính minh bạch của một tùy chỉnh con trỏ chuột bitmap 'trên bay' bạn có thể thấy chức năng này rất hữu ích. Nó sử dụng một ma trận màu để thiết lập độ trong suốt cho bất kỳ bitmap cụ thể nào và sẽ trả về bitmap đã sửa đổi. Để chỉ có một liên lạc trong suốt, TranspFactor phải nằm trong khoảng từ 225 đến 245, chỉ cần dùng thử. (Bạn cần phải nhập khẩu System.Drawing và 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; 

}

Các vấn đề liên quan