ИЛИ - Как побрить коалу, чтобы она не выглядела раздавленной(Но я не думал, что это даст подходящее название)
Проблема: у вас есть три изображения для предварительного просмотра, полученные из основного изображения.Размер предварительных изображений изменен для стандартных пространств изображений на веб-сайте компании. Основное изображение может быть изображением любого размера из любого места.
Пример. Основное изображение - это изображение медведя коалы в высоком разрешении размером 2000x2250.Ваши предварительные просмотры хотят визуализировать коалу с размерами 200x200, 200x50 и 250x150.
Ваша служебная программа изменяет размеры и растягивает исходное изображение до размера ваших трех предварительных просмотров "фактического размера", но, очевидно, каждый предварительный просмотр выглядит немного раздутым, и выЗнайте, что все ненавидят видеть раздавленную коалу.
Чтобы решить эту проблему, вы добавляете в свою программу небольшой метод обрезки, который сокращает пять пикселей от предварительного просмотра на желаемой стороне.Это означает, что вы должны иметь возможность изменить размер изображения и расшатать свою коалу, сбрив ненужные части изображения.
Вы добавляете четыре кнопки в каждый графический блок предварительного просмотра и создаете четыре общих метода для отправки правильного бритья.Инструкция к методу посева.Вы хотите связать каждую конкретную кнопку с определенной картинкой в форме, но вы хотите отправить все события щелчка четырем универсальным функциям.
Как сообщить универсальной функции, какое из трех изображений предварительного просмотра изображения выхотите, чтобы он брился изящным и чудесным способом?
Пример кода:
//cropPict=method for cropping the picture in the relevant picturebox.
//CropSide=a little enum which tells the method which side to crop.
private void btnT_Click(object sender, EventArgs e)
{
cropPict(/*Reference to PictureBox Goes Here*/, CropSide.Top);
}
private void btnB_Click(object sender, EventArgs e)
{
cropPict(/*Reference to PictureBox Goes Here*/, CropSide.Bottom);
}
private void btnR_Click(object sender, EventArgs e)
{
cropPict(/*Reference to PictureBox Goes Here*/, CropSide.Right);
}
private void btnL_Click(object sender, EventArgs e)
{
cropPict(/*Reference to PictureBox Goes Here*/, CropSide.Left);
}
РЕДАКТИРОВАТЬ: как это происходит, вдохновленный Гансом ниже, а не просто вставить PictureBox в тег.Это была отличная идея, я фактически поместил KeyValuePair в тег для каждой кнопки следующим образом:
btnCCB.Tag = new KeyValuePair<CropSide,PictureBox>(CropSide.Bottom,pbxKoala);
btnCCL.Tag = new KeyValuePair<CropSide, PictureBox>(CropSide.Left, pbxKoala);
btnCCR.Tag = new KeyValuePair<CropSide, PictureBox>(CropSide.Right, pbxKoala);
btnCCT.Tag = new KeyValuePair<CropSide, PictureBox>(CropSide.Top, pbxKoala);
Тогда я мог бы просто подключить все кнопок до одного событияобработчик примерно так:
private void btnC_Click(object sender, EventArgs e)
{
Button btnSend = (Button)sender;
KeyValuePair<CropSide, PictureBox> kvCrop = (KeyValuePair<CropSide, PictureBox>)btnSend.Tag;
cropPict(kvCrop.Value,kvCrop.Key);
}
Конечно, еще многое предстоит сделать, но это в значительной степени решило мою проблему.Спасибо, Ганс!