Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832

Переполнение буфера из-за скриншота

18.08.2016, 20:51. Показов 762. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Такая проблема: использую снимок экрана в цикле и через некоторое время программа выдает ошибку:
Недостаточно памяти для обработки команды.
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
HDC hdc = GetDC(0);
    if (hdc)
    {
        Graphics::TBitmap* bmp = new Graphics::TBitmap();
        __try
        {
            int W = Screen->Width;
            int H = Screen->Height;
            bmp->Width = W;
            bmp->Height = H;
            BitBlt(bmp->Canvas->Handle, 0, 0, W, H, hdc, 0, 0, SRCCOPY);
 
            TJPEGImage* jpg = new TJPEGImage();
            __try
            {
                jpg->Assign(bmp);
                jpg->CompressionQuality = 90;
                jpg->SaveToFile("screen.jpg");
            }
            __finally
            {
                delete jpg;
            };
        }
        __finally
        {
            delete bmp;
        }
        }
Билдер останавливает на строчке: jpg->SaveToFile("screen.jpg");
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.08.2016, 20:51
Ответы с готовыми решениями:

Работа с СОМ портом, переполнение буфера
Написал программу на билдере для проверки работы одного девайса через СОМ порт. Программа простейшая использует...

Переполнение буфера
Добрый день! В общем: #include "stdafx.h" #include <iostream> using namespace std; int main(int argc, char* argv) { ...

Переполнение буфера
Объясните почему вылетает ошибка и помогите исправить. Зарание спасибо возникло переполнение буфера, что привело к повреждению...

7
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
18.08.2016, 21:08
Может стоит убрать создание и освобождение TJPEGImage из цикла?
Так и скорость повысить сможешь.
Да и TBitmap тоже не стоит в цикл толкать.
0
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
19.08.2016, 08:59  [ТС]
Тоесть сделать создание элементов до цикла и не удалять?
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
19.08.2016, 09:09
Да. Вынести создания и освобождения компонентов из цикла.
0
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
19.08.2016, 09:18  [ТС]
цикл вечный , так что по сути никогда ничего не будет освобождаться. (конечно вечный цикл это временно для теста). Вынести не получилось. Показывает разные ошибки без указания на участок кода. Можно пример?
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
19.08.2016, 09:24
ziqp, 1) зачем пишешь в цикле в один и тот же файл?
2) где ReleaseDC ?
1
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
19.08.2016, 10:25  [ТС]
2) о releasedc не слышал. Какой код нашел, такой и использовал.
1) мне нужно обрабатывать покадрово каждую картинку

Добавлено через 41 минуту
Нашел код записи в буфер, немного изменил под себя. Насколько он эффективнее в цикле?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
unsigned DataHandle;
HPALETTE APalette;
Word Format;
Graphics::TBitmap *Bitmap=new Graphics::TBitmap;
HDC DC=GetDC(0);
try{
Bitmap->Height=Screen->Height;
Bitmap->Width=Screen->Width;
BitBlt(Bitmap->Canvas->Handle , 0, 0, Screen->Width,
Screen->Height,DC, 0, 0, SRCCOPY);
Image1->Picture->Bitmap->Assign(Bitmap);
}
__finally
{
delete Bitmap;
ReleaseDC(0,DC);
}
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,153
Записей в блоге: 3
19.08.2016, 10:54

Не по теме:

Обработка экрана всегда тяжело идет для вычислений процессора (а если еще поиск пикселей, то в обще не приятно для вычислений).


Можно еще попробовать за цикл вынести создания полотна, а в цикл просто его очищать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.08.2016, 10:54
Помогаю со студенческими работами здесь

Переполнение буфера
В программе имеется форма и записывается текстовые файлы. Когда она запускается всё работает нормально, ProgressBar доходит до...

переполнение буфера
Что такое переполнение буфера?

Переполнение буфера
Не могу найти, где у меня ошибка, выдает переполнение буфера, подскажите пожалуйста. Здесь реализуется связный список #include...

Переполнение буфера
Дали на правку одно больше приложение. Ошибка возникает очень редко, через стандартный отладчик выводит те места, где её впринципе быть не...

Переполнение буфера
Подскажите, пожалуйста кто-нибудь, в чем беда... Во время выполения программы пишет, что буфер переполнен, что точка останова смещена и...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
[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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru