Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.02.26;
Скачать: CL | DM;

Вниз

Утечка памяти в CreateDIBSection   Найти похожие ветки 

 
Я   (2011-11-18 15:06) [0]

Доброго времени суток. Помогите плз найти ошибки.

typedef unsigned char byteW,*PbyteW;

       RECT R;
       GetWindowRect(Wnd, &R);
       int W = R.right - R.left;
       int H = R.bottom - R.top;

       //////////////////////////////////////

       BITMAPINFO* bm_info = new BITMAPINFO;
       bm_info->bmiHeader.biSize = 40;
       bm_info->bmiHeader.biSizeImage = 0;
       bm_info->bmiHeader.biWidth = W;
       bm_info->bmiHeader.biHeight = -H;
       bm_info->bmiHeader.biPlanes = 1;
       bm_info->bmiHeader.biBitCount = 32;
       bm_info->bmiHeader.biCompression = BI_RGB;

       ////////////////////////////////////////////

       HDC DC = GetWindowDC(Wnd);
       HDC memDC = CreateCompatibleDC(DC);

       PbyteW ptrbf = new byteW [W* H*4];

       HBITMAP bm = CreateDIBSection(memDC, bm_info, DIB_RGB_COLORS, (void**)&ptrbf, NULL, NULL);
       //   HBITMAP bm = CreateCompatibleBitmap(DC, W, H);

       HBITMAP oldBM = (HBITMAP) SelectObject(memDC, bm);
       BitBlt(memDC, 0,0, W, H, DC, 0,0, SRCCOPY);
       SelectObject(memDC, oldBM);
       DeleteDC(memDC);
       DeleteObject(oldBM);
       ReleaseDC(Wnd, DC);

       delete[] ptrbf;


 
Rouse_ ©   (2011-11-18 15:54) [1]

иь удалять кто будет?


 
Rouse_ ©   (2011-11-18 15:57) [2]

блин, пунтосвитчер... "BM" имелось ввиду


 
Я   (2011-11-18 15:58) [3]


> иь удалять кто будет?


Уточните плз какой ресурс я не освободил


 
MBo ©   (2011-11-18 15:59) [4]

К утечке отношения не имеет, но вот так поаккуратнее будет:
bm_info->bmiHeader.biSize = sizeof(bm_info)


 
Я   (2011-11-18 16:02) [5]

А ну да я это просто забыл

 DeleteObject(bm);

перед

ReleaseDC(Wnd, DC);

и все равно растет


 
MBo ©   (2011-11-18 16:23) [6]

а bm_info тоже не удаляется?


 
Я   (2011-11-18 16:34) [7]

delete[] bm_info;

Так же не решает проблемы. Эти две операции у меня в "разрабатываемом" коде были. Это я в сабжевый "локализованный" забыл их перенести. Sorry


 
Омлет ©   (2011-11-18 17:03) [8]

Может, еще что-то забыл перенести?


 
Я   (2011-11-18 17:07) [9]

Уже проверил. Вроде как нет :)


 
Rouse_ ©   (2011-11-18 17:37) [10]

Выпимши правда уже, но: (void**)&ptrbf
Це ж не указатель на адрес буфера, а указатель на указатель - не?


 
Rouse_ ©   (2011-11-18 17:49) [11]

Не, бред какой-то получается...
если bm_info и bm удаляешь утечек ни по памяти ни по GDI ресурсам не видно...


 
Я   (2011-11-19 09:49) [12]

Собсно нашел робочий пример. Вот он (с небольшой редакцией)

HBITMAP hbitmap;
       HGDIOBJ hold_bitmap;
       BITMAPINFO bmi;
       VOID *pvbits;

       RECT r;
       GetClientRect(Wnd, &r);

       HDC hdc = GetDC(Wnd);
       int h = (r.bottom - r.top);
       int w = r.right - r.left;

       bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
       bmi.bmiHeader.biHeight = - h;
       bmi.bmiHeader.biWidth =  w;
       bmi.bmiHeader.biPlanes = 1;
       bmi.bmiHeader.biBitCount = 32;
       bmi.bmiHeader.biCompression = BI_RGB;
       bmi.bmiHeader.biSizeImage = bmi.bmiHeader.biHeight * bmi.bmiHeader.biWidth * 4;

       HDC hdc2 = CreateCompatibleDC(NULL);

       hbitmap = CreateDIBSection(NULL,&bmi,DIB_RGB_COLORS,&pvbits,NULL,0x0);
       hold_bitmap = SelectObject(hdc2,hbitmap);

       BitBlt(hdc2, 0,0, w, h,hdc, 0,0, SRCCOPY);

       for(int y=0; y<=h*w; y++)
       {
        /////  Тут копируем в отдельный массив
       //    PRGBAPixel(buff.buffer)[y]=PRGBAPixel(pvbits)[y];

       };

       SelectObject(hdc2, hold_bitmap);
       DeleteObject(hbitmap);
       ReleaseDC(NULL,hdc2);



Страницы: 1 вся ветка

Текущий архив: 2012.02.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1320945193
Кирил_Антонович
2011-11-10 21:13
2012.02.26
Небольшая сетевая БД


2-1321864635
megagenom
2011-11-21 12:37
2012.02.26
Мониторинг свободного пространства на удаленном сервере.


15-1320848351
xss22
2011-11-09 18:19
2012.02.26
Удаление элемента со сдвигом из массива array of record


15-1320735969
ищу хелп
2011-11-08 10:06
2012.02.26
А есть у кого хелп от Delphi 7?


15-1320945919
РРРС
2011-11-10 21:25
2012.02.26
Точки фриланса