2009-06-03 4 views
0

У меня есть приложение, которое использует некоторые пользовательские элементы управления. Я хочу взять уменьшенное изображение usercontrols, когда они будут загружены для использования, и добавить их в панель flowlayout..NET Winform - thumbnail usercontrol

Где я могу найти информацию о создании уменьшенного изображения пользовательского контроля при его загрузке?

ответ

2

Я не знаю способ сделать это, прежде чем она была показана, но как только на экране, вы можете использовать такой подход, как это:

private Image GetControlThumb(Control control, int thumbSize) 
{ 
    Bitmap imgLarge = new Bitmap(control.Bounds.Width, control.Bounds.Height); 
    using (Graphics g = Graphics.FromImage(imgLarge)) 
    { 
     g.CopyFromScreen(
      control.Parent.PointToScreen(new Point(control.Left, control.Top)), 
      new Point(0, 0), 
      new Size(control.Bounds.Width, control.Bounds.Height)); 
    } 


    Size size; 
    if (control.Width > control.Height) 
    { 
     size = new Size(thumbSize, (int)(thumbSize * (float)control.Height/(float)control.Width)); 
    } 
    else 
    { 
     size = new Size((int)(thumbSize * (float)control.Width/(float)control.Height), thumbSize); 
    } 
    Image imgSmall = imgLarge.GetThumbnailImage(size.Width, size.Height, new Image.GetThumbnailImageAbort(delegate { return false; }), IntPtr.Zero); 
    imgLarge.Dispose(); 
    return imgSmall; 

} 

Вы можете использовать его, чтобы получить эскиз какого-либо контроля, как это:

myPictureBox.Image = GetControlThumb(someControl, 100); 
+0

на кнопке мыши я могу сохранить изображение на диск, но на пульт управления пользователя laod я получаю белое изображение, можно использовать Paint() ... Я знаю, это называется несколько раз на usercontrol –

+0

, какова цель блока использования? –

+0

Класс Graphics реализует IDisposable; используемый блок гарантирует, что метод Dispose вызывается так, чтобы объект Graphics мог освобождать ресурсы. –