Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2011, 22:56   #1
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию GetDIBits, нехватка памяти, какие могут быть причины?

есть два TBitmap, оба изначально содержат одно и тоже изображение(Width=501, Height=570, PixelFormat=pf32bits)

хочу у второго сменить яркость, вот процедура
Код:
procedure Brightness(B:TBitmap;D:Single);
var P:array of RGBQUAD;
    T:TBitmapInfo;
    i:Integer;
function NormalizeColor(value:integer):byte;
begin
 if(Value<0) then Result:=0
  else if(Value>255) then Result:=255
   else Result:=Value;
end;
begin
 T.bmiHeader.biSize:=SizeOf(T.bmiHeader);
 T.bmiHeader.biWidth:=B.Width;
 T.bmiHeader.biHeight:=B.Height;
 T.bmiHeader.biPlanes:=1;
 T.bmiHeader.biBitCount:=32;
 T.bmiHeader.biCompression:=BI_RGB;
 T.bmiHeader.biSizeImage:=0;
 T.bmiHeader.biXPelsPerMeter:=0;
 T.bmiHeader.biYPelsPerMeter:=0;
 T.bmiHeader.biClrUsed:=0;
 T.bmiHeader.biClrImportant:=0;
 SetLength(P,B.Width*B.Height);
 if GetDIBits(GetDC(0),B.Handle,0,B.Height,@P[0],T,DIB_RGB_COLORS)=0 then RaiseLastOSError;
 if(d=0.0)then Exit
  else
   begin
    for i:=0 to Length(P)-1 do
     begin
      P[i].rgbBlue:=NormalizeColor(P[i].rgbBlue+Round(P[i].rgbBlue*D));
      P[i].rgbGreen:=NormalizeColor(P[i].rgbGreen+Round(P[i].rgbGreen*D));
      P[i].rgbRed:=NormalizeColor(P[i].rgbRed+Round(P[i].rgbRed*D));
     end;
   end;
 SetDIBits(GetDC(0),B.Handle,0,B.Height,@P[0],T,DIB_RGB_COLORS);
end;
она отрабатывает почему то лишь один раз.
потом все время идет ошибка "Недостаточно памяти для обработки команды" на GetDIBits.
может я что-то упустил?
PS: виртуальный размер памяти занимаемой приложением 45 метров где-то.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.12.2011, 23:50   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Пальцем в небо -
может ReleaseDC нехватает, после GetDC.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 11.12.2011, 00:05   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Пальцем в небо -
мне к сожалению в этом небе ошибку и искать...
Цитата:
может ReleaseDC нехватает, после GetDC.
посмотрим.

----------добавлено-----------
не помогло, выложу больше кода.
у меня проявляет когда выделяешь прямоугольник.
Вложения
Тип файла: rar Новая папка.rar (3.5 Кб, 19 просмотров)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 11.12.2011 в 00:56.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.12.2011, 01:09   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Вообще всё отлично. Ни разу не сбойнуло.
Картинка 501*507 памяти - макс 7 МБ (если диспетчеру верить).
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 11.12.2011, 01:21   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да видимо мне невезет.
ну я переписал сейчас, оптимизировав обращение к ней, пока нормально.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какие варианты по адаптации кода могут быть? VaLenOK007 Помощь студентам 2 20.06.2011 11:47
Соединить в локальную сеть без коммутатора Win 7 и XP. Какие могут быть проблемы? Stilet Windows 7 05.02.2010 17:31
Какие проблемы могут быть с цифровой удостоверением? ann200 Microsoft Office Access 2 07.10.2009 17:52
нехватка виртуальноя памяти semantics Общие вопросы Delphi 6 04.06.2009 11:23
Нехватка памяти Корчеватель Общие вопросы Delphi 0 17.10.2008 19:03