private void SetBitmap(Bitmap img, byte opacity) { IntPtr screenDc = GetDC(IntPtr.Zero); IntPtr memDc = CreateCompatibleDC(screenDc); IntPtr hBitmap = IntPtr.Zero; IntPtr oldBitmap = IntPtr.Zero; try { hBitmap = img.GetHbitmap(Color.FromArgb(0)); oldBitmap = SelectObject(memDc, hBitmap); Size size = new Size(img.Width, img.Height); Point pointSource = new Point(0, 0); Point topPos = new Point(Left, Top); BlendF blend = new BlendF(); blend.BlendOp = AC_SRC_OVER; blend.BlendFlags = 0; blend.SourceConstantAlpha = opacity; blend.AlphaFormat = AC_SRC_ALPHA; UpdateLayeredWindow(this.Handle, screenDc, ref topPos, ref size, memDc, ref pointSource, 0, ref blend, LWA_ALPHA); } finally { ReleaseDC(IntPtr.Zero, screenDc); if (hBitmap != IntPtr.Zero) { SelectObject(memDc, oldBitmap); DeleteObject(hBitmap); } DeleteDC(memDc); } }
private void SetBitmap(Bitmap img, byte opacity) { if (img.PixelFormat != PixelFormat.Format32bppArgb) { MessageBox.Show("Image format not accepted." + "\r\n\r\n" + "Please use one of the allowed formats:" + "\r\n" + " -- 32bit alphablended (rgba) .PNG", "Oy, bakayaro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); this.Close(); return; } IntPtr screenDc = GetDC(IntPtr.Zero); IntPtr memDc = CreateCompatibleDC(screenDc); IntPtr hBitmap = IntPtr.Zero; IntPtr oldBitmap = IntPtr.Zero; try { hBitmap = img.GetHbitmap(Color.FromArgb(0)); oldBitmap = SelectObject(memDc, hBitmap); Size size = new Size(img.Width, img.Height); Point pointSource = new Point(0, 0); Point topPos = new Point(Left, Top); BlendF blend = new BlendF(); blend.BlendOp = AC_SRC_OVER; blend.BlendFlags = 0; blend.SourceConstantAlpha = opacity; blend.AlphaFormat = AC_SRC_ALPHA; UpdateLayeredWindow(this.Handle, screenDc, ref topPos, ref size, memDc, ref pointSource, 0, ref blend, LWA_ALPHA); } finally { ReleaseDC(IntPtr.Zero, screenDc); if (hBitmap != IntPtr.Zero) { SelectObject(memDc, oldBitmap); DeleteObject(hBitmap); } DeleteDC(memDc); } }
private void SetBitmap(Bitmap img, byte opacity) { if (img.PixelFormat != PixelFormat.Format32bppArgb) { MessageBox.Show("Only accepts 32bit alphablended .png images"); System.Diagnostics.Process.GetCurrentProcess().Kill(); } IntPtr screenDc = GetDC(IntPtr.Zero); IntPtr memDc = CreateCompatibleDC(screenDc); IntPtr hBitmap = IntPtr.Zero; IntPtr oldBitmap = IntPtr.Zero; try { hBitmap = img.GetHbitmap(Color.FromArgb(0)); oldBitmap = SelectObject(memDc, hBitmap); Size size = new Size(img.Width, img.Height); Point pointSource = new Point(0, 0); Point topPos = new Point(Left, Top); BlendF blend = new BlendF(); blend.BlendOp = AC_SRC_OVER; blend.BlendFlags = 0; blend.SourceConstantAlpha = opacity; blend.AlphaFormat = AC_SRC_ALPHA; UpdateLayeredWindow(this.Handle, screenDc, ref topPos, ref size, memDc, ref pointSource, 0, ref blend, LWA_ALPHA); } finally { ReleaseDC(IntPtr.Zero, screenDc); if (hBitmap != IntPtr.Zero) { SelectObject(memDc, oldBitmap); DeleteObject(hBitmap); } DeleteDC(memDc); } }
public static extern bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref Point pptDst, ref Size psize, IntPtr hdcSrc, ref Point pprSrc, Int32 crKey, ref BlendF pblend, Int32 dwFlags);