Сделайте кнопку с картинкой под ней в 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.
