Date: 29.07.2018 19:32:26
"Модератор молодец ляпнул не разобравшись в сути вопроса теперь на него никто не обратит внимания"
Не в том дело. На форуме активность и так околонулевая, а сейчас еще и лето, отпуска.
"Проблема: удается сделать снимок только видимой области контрола
А нужна картинка всего содержимого для создания общей миниатюры"
Могу предложить такое решение. Перед тем, как делать скриншот, временно увеличьте размеры панели, так чтобы все элементы попали в "кадр" (если панель прокручивается, позицию прокрутки нужно также сбросить в начало). После создания скриншота, верните все назад. Как-то так:
//сохраняем текущее положение полос прокрутки
int scrollx = -panel1.AutoScrollPosition.X;
int scrolly = -panel1.AutoScrollPosition.Y;
Size szCurrent = panel1.Size; //сохраняем текущий размер панели
int xmax = panel1.Size.Width, ymax = panel1.Size.Height;
//сбрасываем полосы прокрутки в начало
panel1.AutoScrollPosition = new Point(0, 0);
try
{
//найдем крайние координаты для элементов на панели
foreach (Control c in panel1.Controls)
{
if (c.Right > xmax) xmax = c.Right;
if (c.Bottom > ymax) ymax = c.Bottom;
}
//добавим запас на полосы прокрутки
xmax += SystemInformation.VerticalScrollBarWidth;
ymax += SystemInformation.HorizontalScrollBarHeight;
//временно увеличим размеры панели, так чтобы все элементы на ней уместились
panel1.Size = new System.Drawing.Size(xmax, ymax);
//создадим полный скришот панели
Bitmap memoryImage;
Rectangle rect = new Rectangle();
rect.Height = ymax;
rect.Width = xmax;
rect.X = 0;
rect.Y = 0;
memoryImage = new Bitmap(xmax, ymax);
panel1.DrawToBitmap(memoryImage, rect);
pictureBox1.Image = memoryImage;
}
finally
{
//возвращаем старый размер
panel1.Size = szCurrent;
//возвращаем старые позиции прокрутки
panel1.AutoScrollPosition = new Point(scrollx, scrolly);
}
Автор: VadimTagil