Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227

Не хватает памяти

03.09.2025, 23:29. Показов 1098. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
В ScrollBox помещаю Image,
задача маcштабировать изображение,
те делать зум,
все хорошо но при очередной итерации увеличения в проге вылетает надпись "не хватает памяти для обработки команды"
перед этой иттерацией вместо изображения выводит белый фон, размер изображения при этом примерно 7000х4000
Как это побороть ?
Может видеопамяти не хватает ? хотя ее 1.6Гб а изображение от силы 28Мб.

Зум делается методом копирования исходного изображения gBitmap в Image
изменяя переменную K_y

C++
1
2
3
4
5
6
7
8
9
10
11
Image->Picture->Bitmap = NULL;
 
Image->Height  = (ScrollBox1->Height)*100/K_y;
Image->Width   =  (ScrollBox1->Width)*100/K_y;
 
Hi = Image->Height;
Xi = Image->Width;
 
SetStretchBltMode( Image->Canvas->Handle,HALFTONE);
 
StretchBlt(Image->Canvas->Handle,0,0,Xi,Hi, gBitmap->Canvas->Handle, 0,0,gBitmap->Width,gBitmap->Height, SRCCOPY);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2025, 23:29
Ответы с готовыми решениями:

Chart'у не хватает оперативной памяти
Всем привет. Писал программу в C++ Builder 6 для графического отображения информации в Chart...

Стандарт. По УМОЛЧАНИЮ при дин. выделении, если не хватает памяти, вызывается NULL или bad_alloc?
По УМОЛЧАНИЮ при динамическом выделении, если не хватает памяти, возвращается NULL или bad_alloc?...

Генератор паролей, не хватает оперативной памяти
Есть генератор паролей, он выводит их в файл, но как сделать так чтобы я мог создать около 3 млрд....

17
Злостный нарушитель
 Аватар для Verevkin
10263 / 5687 / 1266
Регистрация: 12.03.2015
Сообщений: 26,367
04.09.2025, 08:12
Возможно, ошибка возникает не в функции StretchBlt(), а в коде компонента TImage. Попробуй, для начала, поюзать TBitmap вместо него, чтобы понять, в чём дело.
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
04.09.2025, 10:07
Доброго.
Это вроде как бородатая ошибка с кешированием. Вроде как в последних версиях студии ее поправили.

Я помню решал это добавлением строки, типа так:

C++
1
2
3
SetStretchBltMode( Image->Canvas->Handle,HALFTONE);
SetBrushOrgEx(Image->Canvas->Handle, 0, 0, NULL);  // Добавил это
StretchBlt(Image->Canvas->Handle,0,0,Xi,Hi, gBitmap->Canvas->Handle, 0,0,gBitmap->Width,gBitmap->Height, SRCCOPY);
1
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
04.09.2025, 11:21  [ТС]
Цитата Сообщение от Dinkin Посмотреть сообщение
Я помню решал это добавлением строки, типа так:
Помогло но не до конца, стало увеличивать то 7500х9500 потом опять белый экран
и далее сообщение "out of system resources" уже прогресс )

Добавлено через 1 минуту
Цитата Сообщение от Verevkin Посмотреть сообщение
а в коде компонента TImage
А как это сделать ?.

Добавлено через 1 минуту
Цитата Сообщение от Dinkin Посмотреть сообщение
Вроде как в последних версиях студии ее поправили
У меня Builder 6 а последняя на сегодня какая ? )
0
2625 / 1636 / 266
Регистрация: 19.02.2010
Сообщений: 4,348
04.09.2025, 11:34
whale2, Не надо делать и отрисовывать Image такого размера.
Надо масштабировать не всё исходное изображение - а только тот его кусок, который (после нужного зума) влезает в область видимости на экране.
Да, при этом придётся написать код обработки сдвигов-скроллов картинки и ресайзов окна - чтобы после каждого смещения - заново определить подлежащий показу кусок исходной картинки и его отмасштабировать в область видимости. Но если не победишь текущую проблему - то придётся делать именно так, как я сказал. Ну и, похоже (мне щас лень думать), вместо скроллбокса придётся взять 2 отдельных сколлбара и управлять ими тоже вручную.
0
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
04.09.2025, 11:54  [ТС]
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
а только тот его кусок, который (после нужного зума) влезает в область видимости на экране
Это прям сильно усложнить зумирование )
А тут в ScrollBox прям все замечательно и картинка мышкой двигается, не тормозит.
Можно вообще напрячься и сделать Direct Draw но хотелось бы попроще пока.
0
108 / 72 / 6
Регистрация: 08.08.2025
Сообщений: 716
04.09.2025, 12:10
Тут вариант загрузить в ОЗУ и применить свою процедуру зума. Исходников много, вопрос в качестве картинки на выходе, можно поиграться.
Оттуда выводить на экран для проверки, что получилось. Смотреть кусками, костыль конечно.
0
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
04.09.2025, 12:28  [ТС]
Кстати если сделать так

C++
1
SetStretchBltMode( Image2->Canvas->Handle,STRETCH_DELETESCANS);
увеличивает чуть больше, до 14000х12000 в принципе можно уже и ограничить, видны уже отдельные пиксели,
попробовать на другом компе еще надо.
0
42 / 45 / 6
Регистрация: 21.10.2022
Сообщений: 560
Записей в блоге: 2
04.09.2025, 12:57
Цитата Сообщение от whale2 Посмотреть сообщение
и далее сообщение "out of system resources" уже прогресс
Возможно где то в перерисовке или ресайзе выделяешь объект, но не удаляешь.
0
108 / 72 / 6
Регистрация: 08.08.2025
Сообщений: 716
04.09.2025, 13:00
Режим $COLORONCOLOR ($STRETCH_DELETESCANS) обычно используется для сохранения цвета в цветных растровых изображениях.

Режим $HALFTONE ($STRETCH_HALFTONE) медленнее и требует больше обработки исходного изображения по сравнению с другими режимами, но позволяет получать изображения более высокого качества.
0
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
04.09.2025, 14:24  [ТС]
Цитата Сообщение от didgik Посмотреть сообщение
или ресайзе выделяешь объект
Да вроде нет других объектов, чистый ScrollBox с Image

Добавлено через 6 минут
Цитата Сообщение от a380 Посмотреть сообщение
медленнее и требует больше обработки
Это точно, HALFTONE работает медленнее но сглаживает пиксели а
COLORONCOLOR работает быстро но не сглаживает.
0
108 / 72 / 6
Регистрация: 08.08.2025
Сообщений: 716
04.09.2025, 14:33
whale2, Если в 2х надо, то оригинал раскидать через 1 пиксел, а между ними интерполяцию в 1 пиксел, чисто усреднить. Получится оригинал большого размера.
Ручками за 5 секунд написать такое можно.
0
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
04.09.2025, 15:09  [ТС]
Цитата Сообщение от a380 Посмотреть сообщение
то оригинал раскидать
Это все не то.
0
108 / 72 / 6
Регистрация: 08.08.2025
Сообщений: 716
04.09.2025, 15:17
Цитата Сообщение от whale2 Посмотреть сообщение
Это все не то.
А как оригинал увеличить ? Только интерполяция.
В видеокамерах, фотоаппаратах так и сделано производителем, матрица 720, на выходе 1080.
И пишут фуллХД.
Сони, Панасоник.
А китайцы тем более.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
04.09.2025, 15:30
Есть и такие варианты
Вложения
Тип файла: mp4 123.mp4 (1.97 Мб, 6 просмотров)
0
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
04.09.2025, 15:36  [ТС]
Цитата Сообщение от a380 Посмотреть сообщение
А как оригинал увеличить
Это все делает SetStretchBltMode
я не хочу писать эту функцию с нуля, не стоит оно того.

А кто нить подскажет как сохранять выбранную точку изображения в центре при зумировании и сдвиге,
всю голову уже поломал в лоб не выходит, надо как то увеличивать
ScrollBox1->VertScrollBar->Position
ScrollBox1->HorzScrollBar->Position
десять формул уже перепробовал.

Добавлено через 1 минуту
Цитата Сообщение от Dinkin Посмотреть сообщение
123.mp4 (1.97 Мб, 0 просмотров)
А пояснения ? DirectDraw ?
0
108 / 72 / 6
Регистрация: 08.08.2025
Сообщений: 716
04.09.2025, 15:44
Цитата Сообщение от whale2 Посмотреть сообщение
Это все делает SetStretchBltMode
Это интерполяция
Цитата Сообщение от whale2 Посмотреть сообщение
я не хочу писать эту функцию с нуля
Цитата Сообщение от a380 Посмотреть сообщение
Исходников много, вопрос в качестве картинки на выходе, можно поиграться.
Добавлено через 4 минуты
Цитата Сообщение от whale2 Посмотреть сообщение
А кто нить подскажет как сохранять выбранную точку изображения в центре при зумировании и сдвиге
Цитата Сообщение от a380 Посмотреть сообщение
между ними интерполяцию в 1 пиксел, чисто усреднить. Получится оригинал большого размера
Точка сохранится. Потому что ОРИГИНАЛ
0
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
04.09.2025, 20:52  [ТС]
С центровкой разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.09.2025, 20:52
Помогаю со студенческими работами здесь

Что можно сделать если не хватает памяти?
При компиляции программы в ВС3.1 MS-DOS через интерфейсное меню Compile (Alt+F9) выходит сообщение,...

Какой библиотеки не хватает для работы функции sound()
#include<conio.h> // какой библиотеки нехватает, чтобы интерпретатор не указывал ошибку на sound ...

Доделать надо а ума не хватает
/* 7. Имеется массив записей, расположенных по возрастанию некоторого ключевого поля. Одинаковых...

С++Builder сил моих не хватает
Задача. В одномерном массиве, состоящем из 14 вещественных элементов, вычислить: 1) минимальный...

когда delay-я не хватает...
Пацаны, проблемка. Пишу программу на С++ и нужна мне задержка во времени, но такая, чтобы во время...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru