Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.02.26;
Скачать: [xml.tar.bz2];

Вниз

Утечка памяти в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
1-1287040846
vasia
2010-10-14 11:20
2012.02.26
SQL запрос с датой в Delphi


2-1321257874
igorium
2011-11-14 12:04
2012.02.26
Загрузка в динамический Image часть изображения из файла


15-1320485519
RDen
2011-11-05 12:31
2012.02.26
Свернуть все окна в Win XP


15-1319021210
Alex1983
2011-10-19 14:46
2012.02.26
Ограничение работы программы


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский