CreateCompatibleBitmap - 50Mb FAIL :-((((((
От: Sasparella США  
Дата: 14.09.01 11:16
Оценка:
..Не может создать 5000x2500x32 битмеп (~50Мб), при том, что на машине 700Мб OЗУ, 1.5 Гб своп, и стоит WIn200 Prof Sp2.

Говорит "Not Enough storage to process this command....."

В чем грабли? Может компилятору/линкеру надо какиен-ибудь параметры?

Раньше точно помню, что даже еще бОльшие битмепы создавались, но вроде установки проекта те же самые....
(dll with dynamically linked MFC)


Нужно для печати на принтер "пиксел в пиксел" — создаю битмеп и потом BitBlt на принтер.

В чем дело?

Саша
Re: CreateCompatibleBitmap - 50Mb FAIL :-((((((
От: Avtii  
Дата: 18.09.01 13:54
Оценка:
Здравствуйте Sasparella, вы писали:


S>Говорит "Not Enough storage to process this command....."


Кто говорит — GetLastError?
Re[2]: CreateCompatibleBitmap - 50Mb FAIL :-((((((
От: Sasparella США  
Дата: 18.09.01 14:26
Оценка:
Здравствуйте Avtii, вы писали:

A>Здравствуйте Sasparella, вы писали:



S>>Говорит "Not Enough storage to process this command....."


A>Кто говорит — GetLastError?


Угу... Причем очень интересно происходит. При каком-то "критическом" значении размера битмепа начинает глючить ф-ю wglCreateContext — она возвращает успех, и при этом выставляет ласт еррор в Нот Инаф сторыдж ту процесс.....

При еще большем значении размера — все правильно не работает — то есть возвращается FALSE и код ошибки ему соответствующий ошибке.

Это черт с ним — непонятно другое -ПОЧЕМУ я НЕ могу создать битмеп 50Мб?????? Ибо в каком-то другом моем проекте все отлично работает...

Подобные глюки (если это глюк) оычно бывали если я гдето затирал память, и летело чтото совсем неожиданное. Но тут я баундс чекером вдоль и поперек все прочесал....

странно..

Вот и думаю — может проекту надо какието опции чтобы он мог многло памяти аллокировать — хотя понимаю, что вопрос достаточно маразматичен...


Саша.
Re[3]: ГЛЮК ЛОКАЛИЗОВАН!!!!!!!
От: Sasparella США  
Дата: 18.09.01 14:51
Оценка:
ГЛЮК ЛОКАЛИЗОВАН!


Окончательно озверев я переписал свою прогу на все компы в офисе — результаты опечаливающие.


У нас везде стоит Win2000. Но гдето sp1 а гдето sp2. Так вот, ГЛЮЧИТ ТАМ, ГДЕ СТОИТ Service Pack 2!!!


Убудительная просьба проверить сей факт, если у кого есть возможность.

А именно

CClientDC dc(this);

HBITMAP hb = ::CreateCompatibleBitmap(dc.GetSafeHdc(),6000,6000);

и проверить hb !=NULL. и GetLastError.

Смею утвержать, что на sp1 операция пройдет успешно а на sp2 — провалится.

Проверьте, и вслучае чего будем писать в МелкоСофт......


Саша.
Re[4]: ГЛЮК ЛОКАЛИЗОВАН!!!!!!!
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.09.01 18:51
Оценка:
Здравствуйте Sasparella, вы писали:


S>CClientDC dc(this);


А this — это кто? Окно или ...

S>HBITMAP hb = ::CreateCompatibleBitmap(dc.GetSafeHdc(),6000,6000);


Кинь учу-шник, а то компилить в лом.

PS

А ты хот-фиксы вышедшие после SP2 качал? Если нет, попробуй.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: ГЛЮК ЛОКАЛИЗОВАН!!!!!!!
От: Sasparella США  
Дата: 18.09.01 19:05
Оценка:
VD>PS

VD>А ты хот-фиксы вышедшие после SP2 качал? Если нет, попробуй.


Ага. Products Update ничего кроме Media Player 7 больше поставить не предлагает.

VD>Кинь учу-шник, а то компилить в лом.


УГУшниу ушел мылом...


Сюда кидаю исходник:

#include "stdafx.h"
#include "stdio.h"

void DisplayErrorMessage(LPCTSTR strAddInfo, LPCTSTR pSourceFile, int iLine)
{
     LPVOID lpMsgBuf;
     FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,
     ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL);
     char Message[1000];
     sprintf(Message,"Error: %s\nSource File \"%s\", Line index %d\n",(char*)lpMsgBuf,pSourceFile, iLine);
     ::MessageBox( NULL, Message, strAddInfo, MB_ICONINFORMATION );
     LocalFree( lpMsgBuf );
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

    HDC hDC= GetDC(NULL);
    HBITMAP hb = ::CreateCompatibleBitmap(hDC,6000,6000);
    if (!hb)
           DisplayErrorMessage("FAIL",__FILE__,__LINE__);
    else 
           MessageBox(NULL,"SUCCESS","SUCCESS!!!!!",NULL);

    if (hb)    DeleteObject(hb);

    ReleaseDC(NULL,hDC);
    return 0;
}



Воть....



Саша.
Re[6]: ГЛЮК ЛОКАЛИЗОВАН!!!!!!!
От: Alex Ostapenko Россия  
Дата: 19.09.01 08:09
Оценка:
Здравствуйте Sasparella, вы писали:

S>
S>#include "stdafx.h"
S>#include "stdio.h"

S>void DisplayErrorMessage(LPCTSTR strAddInfo, LPCTSTR pSourceFile, int iLine)
S>{
S>     LPVOID lpMsgBuf;
S>     FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,
S>     ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL);
S>     char Message[1000];
S>     sprintf(Message,"Error: %s\nSource File \"%s\", Line index %d\n",(char*)lpMsgBuf,pSourceFile, iLine);
S>     ::MessageBox( NULL, Message, strAddInfo, MB_ICONINFORMATION );
S>     LocalFree( lpMsgBuf );
S>}

S>int APIENTRY WinMain(HINSTANCE hInstance,
S>                     HINSTANCE hPrevInstance,
S>                     LPSTR     lpCmdLine,
S>                     int       nCmdShow)
S>{

S>    HDC hDC= GetDC(NULL);
S>    HBITMAP hb = ::CreateCompatibleBitmap(hDC,6000,6000);
S>    if (!hb)
S>           DisplayErrorMessage("FAIL",__FILE__,__LINE__);
S>    else 
S>           MessageBox(NULL,"SUCCESS","SUCCESS!!!!!",NULL);

S>    if (hb)    DeleteObject(hb);

S>    ReleaseDC(NULL,hDC);
S>    return 0;
S>}
S>



S>Воть....


Угу, Whistler Server b3505. Та же фигня. Если не возражаешь, я могу накатать по нему баг-репорт, упомянув твое авторство ошибки.
"Будь достоин победы" (c) 8th Wizard's rule.
Re: CreateCompatibleBitmap - 50Mb FAIL :-((((((
От: Avtii  
Дата: 19.09.01 08:31
Оценка:
Саша, не поверишь но на W2K Sp2 Твой сырец возвратил SUCCCEEEESSSS!!! :0)
У меня Visual Studio SP5 может в этом грабли?
Re[7]: ГЛЮК ЛОКАЛИЗОВАН!!!!!!!
От: Sasparella США  
Дата: 19.09.01 09:45
Оценка:
Здравствуйте Alex Ostapenko, вы писали:

AO>Здравствуйте Sasparella, вы писали:



AO>Угу, Whistler Server b3505. Та же фигня. Если не возражаешь, я могу накатать по нему баг-репорт, упомянув твое авторство ошибки.



Угу, конечно не возражаю — у меня просто нет опыта катания подобных вещей......

Саша.
Re[2]: CreateCompatibleBitmap - 50Mb FAIL :-((((((
От: Sasparella США  
Дата: 19.09.01 09:55
Оценка:
Здравствуйте Avtii, вы писали:

A>Саша, не поверишь но на W2K Sp2 Твой сырец возвратил SUCCCEEEESSSS!!! :0)

A>У меня Visual Studio SP5 может в этом грабли?


Оки, давай конкретизировать

у меня

W2k prof Build 2195, Sp 2
Visual Studio 6 sp5 processor pack5

Глючит на компах
1 .Mother ASUS CUV4X, PIII 800EB, 724 Mb RAM. 1.5Gb page.
2 .Mother ASUS P3V4X, PIII 866EB, 514 Mb RAM. 700Mb page.

Вот...

Нужно побольше статистики — вот народ подключится, и можно будет наверное выявить причину или удостоверится в глюке....


Саша.
Re[8]: ГЛЮК ЛОКАЛИЗОВАН!!!!!!!
От: Alex Ostapenko Россия  
Дата: 19.09.01 11:19
Оценка:
Здравствуйте Sasparella, вы писали:

AO>>Угу, Whistler Server b3505. Та же фигня. Если не возражаешь, я могу накатать по нему баг-репорт, упомянув твое авторство ошибки.



S>Угу, конечно не возражаю — у меня просто нет опыта катания подобных вещей......


Усе, баг по Вистлеру уехал. Было бы еще неплохо его послать, как баг SP2, но сервиспаки я, к сожалению, не тестирую. :(
"Будь достоин победы" (c) 8th Wizard's rule.
Re[9]: ГЛЮК ЛОКАЛИЗОВАН!!!!!!!
От: Snax Россия  
Дата: 26.09.01 09:07
Оценка:
Тачка №1
2k SP2 = OK

Тачка №2
98 DX6.1 = FAIL: The operation conpleted successfully, file a.cpp line 24
2k DX8 SP2 = OK
2k clean install = OK
2k cb SP2 = FAIL: The handle is invalid, file a.cpp line 24
XP build 2600 = OK

Возможно, проблема в драйверах видева. И в видевожелезе собственно.

Павел.
Re[10]: ГЛЮК ЛОКАЛИЗОВАН!!!!!!!
От: Sasparella США  
Дата: 26.09.01 10:41
Оценка:
Здравствуйте Snax, вы писали:

S>Тачка №1

S>2k SP2 = OK

S>Тачка №2

S>98 DX6.1 = FAIL: The operation conpleted successfully, file a.cpp line 24

Насчет этого все правильно — на 9x созданный битмеп не может превышать 16Mb.


S>2k DX8 SP2 = OK

S>2k clean install = OK
S>2k cb SP2 = FAIL: The handle is invalid, file a.cpp line 24

Значит все-таки SP2 что то портит.....

S>XP build 2600 = OK


S>Возможно, проблема в драйверах видева. И в видевожелезе собственно.


Хммм. свежая идея. Сейчас вот проверил, вот рез

OЗУ OS Video Video Driver TEST

300Mb, W2000sp2 Sis 8Mb Native, Win2000 — OK
700Mb, W2000sp2 TNT2 M64 32Mb Detonator 5.12 — FAIL
700Mb, W2000sp2 TNT2 M64 32Mb Detonator 5.12 — FAIL /* второй такой-же комп*/
196Mb, W2000 no sp S3 Virge DX 4Mb S3 Common — OK
196Mb, W2000 no sp Saturn GL (Permedia)8Mb Native SaturnGL — OK
320Mb, W2000 sp1 ATI Rage Pro 2X 8Mb Native Win2000 — OK
1Gb, W2000 Elsa Gloria 64Mb Elsa native — OK
1Gb NT4 SP6 Metrox G200 Matrox native — OK
512Mb W2000 sp2 TNT2 M64 16Mb Detonator ?.?? — FAIL /* не помню точно версию*/


Но странно, чтобы продукция nVidia так глючила....

В общем, благодаря Павлу, обрисовалось направление поиска — Теперь можно проверить разные детонаторы или поставить родные асусовские дрова.

В общем из моих тестов четко следует только что w2000+sp2+Detonator+TNT2 = кранты.

Все равно странно, он что, к видеоподсистеме обращается когда битмеп создает???? Странно.

Спасибо за поддержку!!!!

Саша
Re[11]: ГЛЮК ЛОКАЛИЗОВАН!!!!!!!
От: sasha Грузия  
Дата: 26.09.01 11:10
Оценка:
Здравствуйте Sasparella, вы писали:

S>Здравствуйте Snax, вы писали:


S>>Тачка №1

S>>2k SP2 = OK

S>>Тачка №2

S>>98 DX6.1 = FAIL: The operation conpleted successfully, file a.cpp line 24

S>Насчет этого все правильно — на 9x созданный битмеп не может превышать 16Mb.



S>>2k DX8 SP2 = OK

S>>2k clean install = OK
S>>2k cb SP2 = FAIL: The handle is invalid, file a.cpp line 24

S>Значит все-таки SP2 что то портит.....


S>>XP build 2600 = OK


S>>Возможно, проблема в драйверах видева. И в видевожелезе собственно.


S>Хммм. свежая идея. Сейчас вот проверил, вот рез

S>
S>OЗУ OS Video Video Driver TEST

S>300Mb, W2000sp2 Sis 8Mb Native, Win2000 — OK

S>700Mb, W2000sp2 TNT2 M64 32Mb Detonator 5.12 — FAIL
S>700Mb, W2000sp2 TNT2 M64 32Mb Detonator 5.12 — FAIL /* второй такой-же комп*/
S>196Mb, W2000 no sp S3 Virge DX 4Mb S3 Common — OK
S>196Mb, W2000 no sp Saturn GL (Permedia)8Mb Native SaturnGL — OK
S>320Mb, W2000 sp1 ATI Rage Pro 2X 8Mb Native Win2000 — OK
S>1Gb, W2000 Elsa Gloria 64Mb Elsa native — OK
S>1Gb NT4 SP6 Metrox G200 Matrox native — OK
S>512Mb W2000 sp2 TNT2 M64 16Mb Detonator ?.?? — FAIL /* не помню точно версию*/


S>Но странно, чтобы продукция nVidia так глючила....


S>В общем, благодаря Павлу, обрисовалось направление поиска — Теперь можно проверить разные детонаторы или поставить родные асусовские дрова.


S>В общем из моих тестов четко следует только что w2000+sp2+Detonator+TNT2 = кранты.


S>Все равно странно, он что, к видеоподсистеме обращается когда битмеп создает???? Странно.


S>Спасибо за поддержку!!!!


S>Саша



Саша, у меня полный FAIL и у Саши тут рядом тоже. LineIndex — 24. (VC++6 без SP).
Re[11]: ГЛЮК ЛОКАЛИЗОВАН!!!!!!!
От: Alex Fedotov США  
Дата: 26.09.01 14:30
Оценка:
Здравствуйте Sasparella, вы писали:

S>Все равно странно, он что, к видеоподсистеме обращается когда битмеп создает???? Странно.


Ничего странного. Вызов CreateCompatibleBitmap идет прямиком в дисплей-драйвер под именем DrvCreateDeviceBitmap. Это дает возможность драйверу создать битмап прямо в видеопамяти, что значительно ускоряет последующую работу с ним. Так что очень вероятно, что драйвер здесь причастен.
-- Alex Fedotov
Re[12]: ГЛЮК ЛОКАЛИЗОВАН!!!!!!!
От: Lexey Россия  
Дата: 26.09.01 17:27
Оценка:
Здравствуйте sasha, вы писали:

S>>>Возможно, проблема в драйверах видева. И в видевожелезе собственно.


Да, мы с братом пришли к такому же выводу. Дело в видеодрайверах.

S>>Хммм. свежая идея. Сейчас вот проверил, вот рез

S>>
S>>OЗУ OS Video Video Driver TEST

S>>300Mb, W2000sp2 Sis 8Mb Native, Win2000 — OK

S>>700Mb, W2000sp2 TNT2 M64 32Mb Detonator 5.12 — FAIL
S>>700Mb, W2000sp2 TNT2 M64 32Mb Detonator 5.12 — FAIL /* второй такой-же комп*/
S>>196Mb, W2000 no sp S3 Virge DX 4Mb S3 Common — OK
S>>196Mb, W2000 no sp Saturn GL (Permedia)8Mb Native SaturnGL — OK
S>>320Mb, W2000 sp1 ATI Rage Pro 2X 8Mb Native Win2000 — OK
S>>1Gb, W2000 Elsa Gloria 64Mb Elsa native — OK
S>>1Gb NT4 SP6 Metrox G200 Matrox native — OK
S>>512Mb W2000 sp2 TNT2 M64 16Mb Detonator ?.?? — FAIL /* не помню точно версию*/


S>>Но странно, чтобы продукция nVidia так глючила....


Увы, так глючит не только nVidia. У меня на работе та же картина на i810, причем как с родными Xpшными драйверами, так и с последними интеловскими. В любом случае, при использовании встроенных в систему драйверов, это нужно рассматривать как 100% баг ОС.
"Будь достоин победы" (c) 8th Wizard's rule.
Re: CreateCompatibleBitmap - 50Mb FAIL :-((((((
От: Всеволод Россия  
Дата: 29.08.05 13:42
Оценка:
Я, видимо, наступил на эти же грабли !

Моя программа рисует тайловую картинку, приходится заранее загружать много битмапов. Обнаружил, что при превышени какого-то порога (памяти видеокарты скорее всего) не проходят с виду безобидные вызовы CreateDIBitmap, CreateCompatibleBitmap и даже LoadBitmap. Картинки небольших размеров. Памяти и свопа на машине с избытком.
Заметил вот еще что — если в свойствах монитора поиграть ползунком "аппаратное ускорение", то момент прекращения работы изменяется, но он все равно наступает.
Никто еще на разобрался как с этим бороться ?
Re[2]: CreateCompatibleBitmap - 50Mb FAIL :-((((((
От: gugle  
Дата: 29.08.05 13:57
Оценка:
Здравствуйте, Всеволод, Вы писали:

В>Я, видимо, наступил на эти же грабли !


Попробуйте CreateDIBSection()
С уважением,
GU Glez [Джи Ю Глиз]
Re[2]: CreateCompatibleBitmap - 50Mb FAIL :-((((((
От: Всеволод Россия  
Дата: 30.08.05 12:42
Оценка:
Здравствуйте, Всеволод, Вы писали:

В>Я, видимо, наступил на эти же грабли !


В>Моя программа рисует тайловую картинку, приходится заранее загружать много битмапов. Обнаружил, что при превышени какого-то порога (памяти видеокарты скорее всего) не проходят с виду безобидные вызовы CreateDIBitmap, CreateCompatibleBitmap и даже LoadBitmap. Картинки небольших размеров. Памяти и свопа на машине с избытком.

В>Заметил вот еще что — если в свойствах монитора поиграть ползунком "аппаратное ускорение", то момент прекращения работы изменяется, но он все равно наступает.
В>Никто еще на разобрался как с этим бороться ?

Поставил свежие видеодрайверы — стало лучше, грузит больше картинок, но все равно потом дает отлуп по ошибке номер 8 (не хватает памяти).

На моей машине вот такой простой тест повторяет ситуацию
   HDC hDC=::GetDC(NULL);
   HANDLE hBmp;
   for (int i=0; ; i++)
   {
      hBmp=CreateCompatibleBitmap(hDC, 256, 256);
      if (hBmp==NULL)
      {
         вот здесь мы будем при i=944
      }
   }
Re: CreateCompatibleBitmap - 50Mb FAIL :-((((((
От: Кодёнок  
Дата: 30.08.05 12:50
Оценка:
Здравствуйте, Sasparella, Вы писали:

S>..Не может создать 5000x2500x32 битмеп (~50Мб), при том, что на машине 700Мб OЗУ, 1.5 Гб своп, и стоит WIn200 Prof Sp2.


S>Говорит "Not Enough storage to process this command....."


ОЗУ тут ни при чем, compatible bitmap создается в видеопамяти. Используй CreateDIBSection().
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.