Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.Windows.Forms;
- namespace Screen_Recorder
- {
- public class CustomButton : Button
- {
- private bool _DisplayFocusCues = true;
- private Image _originalImage;
- private Image _clickImage;
- private Image img;
- public CustomButton()
- {
- this.FlatStyle = FlatStyle.Flat;
- this.FlatAppearance.BorderSize = 0;
- this.FlatAppearance.BorderColor = Color.FromArgb(0, 255, 255, 255); // Transparent
- this.FlatAppearance.MouseDownBackColor = Color.FromArgb(0, 255, 255, 255); // Transparent on click
- this.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 255, 255, 255); // Transparent on hover
- this.DisplayFocusCues = false;
- // Assume Properties.Resources.YourImageResource is the resource identifier for your image
- img = ResizeImage(Properties.Resources.icons8_record_32, 50, 50);
- this.Image = img;
- this.Size = img.Size;
- _originalImage = img;
- }
- protected override void Dispose(bool disposing)
- {
- if (disposing)
- {
- _originalImage?.Dispose();
- _clickImage?.Dispose();
- }
- base.Dispose(disposing);
- }
- protected override bool ShowFocusCues => _DisplayFocusCues;
- public bool DisplayFocusCues
- {
- get { return _DisplayFocusCues; }
- set { _DisplayFocusCues = value; }
- }
- public new Image Image
- {
- get { return base.Image; }
- set
- {
- base.Image = value;
- _originalImage = value;
- _clickImage = CreateClickImage(_originalImage); // Recreate click image if the original changes
- }
- }
- protected override void OnMouseDown(MouseEventArgs mevent)
- {
- base.OnMouseDown(mevent);
- if (_clickImage != null)
- this.Image = _clickImage;
- }
- protected override void OnMouseUp(MouseEventArgs mevent)
- {
- base.OnMouseUp(mevent);
- _originalImage = img;
- this.Image = _originalImage;
- }
- private Image CreateClickImage(Image original)
- {
- if (original == null)
- return null;
- Bitmap newBitmap = new Bitmap(original);
- BitmapData bmpData = newBitmap.LockBits(
- new Rectangle(0, 0, newBitmap.Width, newBitmap.Height),
- ImageLockMode.ReadWrite,
- newBitmap.PixelFormat);
- IntPtr ptr = bmpData.Scan0;
- int bytes = Math.Abs(bmpData.Stride) * newBitmap.Height;
- byte[] rgbValues = new byte[bytes];
- System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
- for (int i = 0; i < rgbValues.Length; i += 4)
- {
- rgbValues[i] = (byte)(rgbValues[i] * 0.8); // Blue
- rgbValues[i + 1] = (byte)(rgbValues[i + 1] * 0.8); // Green
- rgbValues[i + 2] = (byte)(rgbValues[i + 2] * 0.8); // Red
- // Alpha (rgbValues[i + 3]) is unchanged
- }
- System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
- newBitmap.UnlockBits(bmpData);
- return newBitmap;
- }
- private Image ResizeImage(Image originalImage, int width, int height)
- {
- Bitmap newImage = new Bitmap(width, height);
- using (Graphics gfx = Graphics.FromImage(newImage))
- {
- gfx.DrawImage(originalImage, 0, 0, width, height);
- }
- return newImage;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment