Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 36

Очень быстрое создание картинок (скриншотов)

02.09.2014, 21:34. Показов 1711. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Суть программы - создание скриншотов рабочего стола очень и очень быстро.

Для этого в главном классе программы я создаю бесконечный цикл, который обращается к методу моей библиотеки и запихивает возвращенный этим методом скриншот в List<Bitmap>

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            int x = 1;
            int screenshotsAmount = 0;
            List<Bitmap> screenshots = new List<Bitmap>();
            while (x == 1)
            {
                screenshots.Add(FullsizeScreenshot.makeScreenshot());
                Clipboard.SetImage(screenshots[screenshotsAmount]);
                Console.WriteLine("Screenshot " + screenshotsAmount + " has been made and added to the Bitmap list!");
                screenshotsAmount++;
            }
        }
    }
А вот и сам класс в библиотеке

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Class for making standard screenshots
    public struct FullsizeScreenshot
    {
        
        // Making fullscreen screenshot
        public static Bitmap makeScreenshot() 
        {
            Bitmap screenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb)
           
                Graphics gfxScreenshot = Graphics.FromImage(screenshot);
                
                gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
 
                return screenshot;
        }
    }
И все было бы отлично, да вот только после 100 скриншота подряд происходит видимо переполнение памяти и программа выкидывает ошибку.

Надо каким-то образом уничтожать объекты Bitmap screenshot и Graphics gfxScreenshot. using и .dispose() не работают, так как эти объекты ссылочные, и, при их удалении, удаляются данные о картинках в основном классе.

Помогите пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2014, 21:34
Ответы с готовыми решениями:

Создание скриншотов
Подскажите как сделать автоматически скриншоты удаленного стола? Делаю в программе RoboTask, запись кликов все понятно, но мне надо брать...

Создание и сохранение скриншотов
Необходимо, чтобы через определённый отрезок времени программа делала скришот экрана и автоматически его сохраняла в папку программы. В...

Создание серии скриншотов
Есть две формы через Button1 запускаю цикл, как мне через эту же кнопку его прервать. oid __fastcall TForm1::Button1Click(TObject...

3
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,101
03.09.2014, 00:11
а зачем вам много скриншотов? зачем вы их собираете в List?
0
298 / 260 / 108
Регистрация: 26.10.2012
Сообщений: 810
03.09.2014, 08:33
А вот удалять данные придется. Bitmap - очень тяжелый класс.
100 битмэпов разрешением 1280x1024 занимают 1280 * 1024 * 4 *100 = 500 Mb
Тенденция очень памятежорная.
Проще как минимум сохранять картинки на диск как .png , а в списке хранить ссылки на файлы.
0
Заблокирован
03.09.2014, 08:37
gfxScreenshot.CopyFromScreen - это очень быстро? Через DirectX не быстрее? Посмотрите примеры на кодпрожекте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.09.2014, 08:37
Помогаю со студенческими работами здесь

Очень быстрое движение фигуры sfml
У меня есть фигура(квадрат для примера): VertexArray quad(LinesStrip, 5); quad.position = Vector2f(0, 0); quad.position =...

Слишком медленное создание скриншотов
Мне нужно оптимизировать код. У меня в нескольких потоках постоянно узнается цвет конкретного пикселя на экране, но скорость вычисления...

Создание скриншотов нескольких папок
Здравствуйте. Подскажите пожалуйста, как в Powershell сделать поочередно скриншоты нескольких папок. По идеи, должно открываться окно,...

Создание скриншотов и запись их в поток
Добрый день. Необходимо написать программу для снятия 25 скриншотов экрана в секунду с последующей их записью в поток. Делать скриншот...

Скоростное создание скриншотов - до 30 в секунду
Всем привет! Я настолько отважный парень, что решился написать программу для захвата видео с экрана! В общем у меня отчасти получилось:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru