Форум: "Начинающим";
Текущий архив: 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.004 c