Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95

Ошибка JPEGImage->Compress()

20.04.2012, 21:38. Показов 2705. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю скиншот экрана
Все вроде ничего, но после 5-10 раза вылетает с ошибкой Out Of system recourses, а иногда держиться довольно долго
вот код
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
30
31
32
 static void GetScreenShot(char *Buffer,int &Size)
    {
        TMemoryStream  *MemoryStream;
        TJPEGImage     *JPEGImage;
        TCopyDataStruct Msg;
 
        MemoryStream = new TMemoryStream;
        JPEGImage = new TJPEGImage;
 
        Graphics::TBitmap *Bitmap = new Graphics::TBitmap();
        Bitmap->Height=Screen->Height;
        Bitmap->Width=Screen->Width;
        BitBlt(Bitmap->Canvas->Handle,0,0,Screen->Width,Screen->Height,GetDC(0),0,0,SRCCOPY);
 
        JPEGImage->Assign(Bitmap);
        JPEGImage->CompressionQuality = 25;
        JPEGImage->Compress();                            // <---------- Вот тут вылетает
        JPEGImage->SaveToStream(MemoryStream); 
 
        Msg.dwData = 1;
        Msg.cbData = MemoryStream->Size;
        Msg.lpData = MemoryStream->Memory;
 
        memset(Buffer,0,sizeof(Buffer));
        memcpy(Buffer,Msg.lpData,Msg.cbData);
 
        Size = Msg.cbData;
 
        delete Bitmap;
        delete JPEGImage;
        delete MemoryStream;
    }
Не пойму в чем дело
переделал в
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    static void GetScreenShot(char *Buffer,int &Size)
    {
        TMemoryStream  *MemoryStream;
        TJPEGImage     *JPEGImage;
        TCopyDataStruct Msg;
 
        MemoryStream = new TMemoryStream;
        JPEGImage = new TJPEGImage;
 
 
        TCanvas *ScreenCopy = new TCanvas;
        Graphics::TBitmap *gr = new Graphics::TBitmap();
        TRect rcDest, rcSource;
 
        rcDest = Rect(0, 0, 320, 240);
        rcSource = Screen->DesktopRect;
 
        ScreenCopy->Handle = GetDC(0);
       gr->Height = 240;
       gr->Width = 320;
       gr->Canvas->CopyRect(rcDest,ScreenCopy,rcSource);
       ReleaseDC(0, ScreenCopy->Handle);
 
       JPEGImage->CompressionQuality = 25;
       JPEGImage->Assign(gr);
//        JPEGImage->Compress();
try
{
        JPEGImage->SaveToStream(MemoryStream);
}
catch(Exception &e)
{
}
        Msg.dwData = 1;
        Msg.cbData = MemoryStream->Size;
        Msg.lpData = MemoryStream->Memory;
 
        memset(Buffer,0,sizeof(Buffer));
        memcpy(Buffer,Msg.lpData,Msg.cbData);
 
        Size = Msg.cbData;
 
        delete ScreenCopy;
        delete gr;
        delete JPEGImage;
        delete MemoryStream;
    }
все равно - вылетает. Прочитал что при JPEGImage->SaveToStream(MemoryStream) метод JPEGImage->Compress() вызывается автоматически.
Но не понятно, почему данный код (см. ниже) работает стабильно (использую DSPack для отлова кадров с WEB камеры)
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
    static void GetVideoFromVideoDevice(char *Buffer,int &Size)
    {
        TMemoryStream  *MemoryStream = new TMemoryStream;;
        TJPEGImage     *JPEGImage = new TJPEGImage;
        TCopyDataStruct Msg;
 
        MainForm->SampleGrabber->GetBitmap(MainForm->VideoImage->Picture->Bitmap);
        Application->ProcessMessages();
        MemoryStream->Position = 0;
        MemoryStream->Clear();
 
        JPEGImage->Assign(MainForm->VideoImage->Picture->Bitmap);
        JPEGImage->CompressionQuality = 25;
        JPEGImage->Compress();
        JPEGImage->SaveToStream(MemoryStream);
 
        Msg.dwData = 1;
        Msg.cbData = MemoryStream->Size;
        Msg.lpData = MemoryStream->Memory;
 
        memset(Buffer,0,sizeof(Buffer));
        memcpy(Buffer,Msg.lpData,Msg.cbData);
 
        Size = Msg.cbData;
        delete MemoryStream;
        delete JPEGImage;
    }
в чем моя ошибка, весь день гуглил, крутил так и так, ни что не помогает. Помогите
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.04.2012, 21:38
Ответы с готовыми решениями:

Почему JPEGImage->Compress() работает в TTimer, но не работает в нитке
to: Модератор LK, да я согласен мы маленько отвлеклись :) но просто вопрос наболевший, не дает спать 2 дня уже: Почему в Таймере...

Функция Compress(s,t)
Назначение: замена в строке s множественных вхождений символа t на одно.

функция compress
Люди, плз помогите.:help: Написать и протестировать функцию compress(), которая &quot;сжимает&quot; строку, удаляя из неё все пробелы. надо...

22
21.04.2012, 22:34
Студворк — интернет-сервис помощи студентам
 Комментарий модератора 
Или будем обсуждать вопросы по потокам в новой теме, или эта тема будет закрыта .
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.04.2012, 22:34
в CreateThread нет синхронизации с формой!
0
21.04.2012, 22:35
 Комментарий модератора 
Тема закрыта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.04.2012, 22:35

Функция Compress(s,t)
Назначение: замена в строке s множественных вхождений символа t на одно.

Compress и uncompress палидромов
Нужна помощь с зачётом, в прологе я 0, а дэдлайн уже в пятницу.(В далнейшем не собираюсь использовать этот язык, так как не специализируюсь...

Compress Document Data + Ods 51
Собственно поднимаю тему по сабжу Так как некая ситуация возникает, которую я не совсем понимаю. Имеем сервер 8.5.1 Имеем базу...

Не работает метод Compress для TJpegImage
Всем добрый день. Хочу воспользоваться методом Compress для TJpegImage. Написал тестовую процедуру.var jpg: TJpegImage; bmp:...

Написать программу с функцией Compress, выполняющую сжатие строки
Добрый вечер! Подскажите пожалуйста. Надо написать функцию CompressStr(s), выполняющую сжатие строки s по следующему правилу: каждая...


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

Или воспользуйтесь поиском по форуму:
23
Закрытая тема Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru