Сделайте кнопку с картинкой под ней в C#
В этом примере кнопка отображает копии изображения, на котором она сидит, и, похоже, кнопка является частью основного изображения.
Ключом к этому примеру является следующий метод SetButtonBackground.
// Сделать кнопку отображением части // Изображение PictureBox, которое находится под ним. private void SetButtonBackground(PictureBox pic, Button btn) { // Получить смещение между PictureBox // и верхние левые углы кнопки. Point pic_pt = new Point(0, 0); pic_pt = pic.PointToScreen(pic_pt); Point btn_pt = new Point(0, 0); btn_pt = btn.PointToScreen(btn_pt); int x_offset = btn_pt.X - pic_pt.X; int y_offset = btn_pt.Y - pic_pt.Y; // Получаем размер кнопки. int wid = btn.ClientSize.Width; int hgt = btn.ClientSize.Height; // Сделайте растровое изображение, чтобы удерживать изображение кнопки. Bitmap bm = new Bitmap(wid, hgt); using (Graphics gr = Graphics.FromImage(bm)) { // Прямоугольник назначения. Rectangle dest_rect = new Rectangle(0, 0, wid, hgt); // Исходный прямоугольник. Rectangle src_rect = new Rectangle(x_offset, y_offset, wid, hgt); // Скопируем изображение под кнопкой в растровое изображение. gr.DrawImage(pic.Image, dest_rect, src_rect, GraphicsUnit.Pixel); } // Сделать кнопку отображать изображение. btn.Image = bm; }
Метод начинается с использования метода PointToScreen, чтобы определить, где находятся верхние левые углы кнопки PictureBox и . Это дает относительное смещение между двумя элементами управления в пикселях.
Затем код получает размер кнопки, делает его Bitmap и создает связанный с ним объект Graphics.
Далее, метод создает структуры Rectangle для определения исходной и целевой областей в изображении элемента управления PictureBox, который должен быть скопирован на кнопку. Затем он использует метод DrawImage объекта Graphics для копирования этой части изображения PictureBox в новый Bitmap. Он заканчивается тем, что Button отображает новый Bitmap.