Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.01.2007, 15:02
Linkoln Linkoln вне форума
Прохожий
 
Регистрация: 29.01.2007
Сообщения: 2
Репутация: 10
По умолчанию вопрос о CreateDIBSection

у меня вопрос по CreateDIBSection.

есть фрагмент функции:
.....


DC := GetDC(0);
hNewBitmap := CreateDIBSection( DC,PBitmapInfo(BitmapHeader)^, DIB_RGB_COLORS,Bits,0,0);

......
при однократном вызове функции за период работы программы все нормально.
но если вызвывать фунцкию многократно именно в этом метсе выдает ошибку.

Проблема в том функция дает как резальтат указатель на обект, который дальше будет использоватся. Я так понимаю что при многократном вызове функции занимается все больше и больше место в памяти и происходит переполнение.

Вопрос: как сделать что-бы освобождать область, на которую указывает указатель( извините за тафтологию).

CreateDIBSection - функция Windows

если нужно дам полный исходник функции
Ответить с цитированием
  #2  
Старый 29.01.2007, 23:17
ilang ilang вне форума
Новичок
 
Регистрация: 11.12.2006
Сообщения: 68
Репутация: 10
По умолчанию

Обязательно надо освобождать память. Делается это при помощи
Код:
function DeleteObject(hNewBitmap);
Ответить с цитированием
  #3  
Старый 30.01.2007, 00:16
Linkoln Linkoln вне форума
Прохожий
 
Регистрация: 29.01.2007
Сообщения: 2
Репутация: 10
По умолчанию

проблема то в том что эта функция используется

вот полный исходник кода функции:

function PNGtoIcon( str : string;
ACursor : Boolean = false;
AHotSpotX : Integer = 0;
AHotSpotY : Integer = 0) : HICON;
var
APNG : TPNGObject;
Width, Height : Integer;
BitmapHeader : PBitmapV5Header;
hNewBitmap, hMonoBitmap : HBITMAP;
Bits : Pointer;
x, y : Integer;
DC : HDC;
IconInfo : _ICONINFO;
Pixel : ^Integer;
ScanLine : PRGBTriple;
AlphaScanline : pByteArray;
begin

APNG := TPNGObject.Create;

APNG.LoadFromFile(str);
Width := APNG.Width;
Height := APNG.Height;
New(BitmapHeader);
BitmapHeader.bV5Size := sizeof(BITMAPV5HEADER);
BitmapHeader.bV5Width := Width;
BitmapHeader.bV5Height := -Height;
BitmapHeader.bV5Planes := 1;
BitmapHeader.bV5BitCount := 32;
BitmapHeader.bV5Compression := BI_BITFIELDS;
BitmapHeader.bV5RedMask := $00FF0000;
BitmapHeader.bV5GreenMask := $0000FF00;
BitmapHeader.bV5BlueMask := $000000FF;
BitmapHeader.bV5AlphaMask := $FF000000;

DC := GetDC(0);
hNewBitmap := CreateDIBSection( DC,PBitmapInfo(BitmapHeader)^, DIB_RGB_COLORS,Bits,0,0);
Dispose(BitmapHeader);
ReleaseDC(0,dc);
hMonoBitmap:=CreateBitmap(Width,Height,1,1,nil);


Pixel := Bits;
for y := 0 to Height-1 do
begin
ScanLine := APNG.Scanline[y];
AlphaScanline := APNG.AlphaScanline[y];
for x := 0 to Width - 1 do
begin

Pixel^ := AlphaScanLine[x];
Pixel^ := Pixel^ shl 8;
Inc(Pixel^, Scanline^.rgbtRed);
Pixel^ := Pixel^ shl 8;
Inc(Pixel^, Scanline^.rgbtGreen);
Pixel^ := Pixel^ shl 8;

Inc(Pixel^, Scanline^.rgbtBlue);
Inc(Pixel);
Inc(ScanLine);
end;
end;


IconInfo.fIcon := not ACursor;
if ACursor then
begin

IconInfo.xHotspot := AHotSpotX;
IconInfo.yHotspot := AHotSpotY;
end;

IconInfo.hbmMask := hMonoBitmap;
IconInfo.hbmColor := hNewBitmap;
Result := CreateIconIndirect(IconInfo);
DeleteObject(hNewBitmap);
DeleteObject(hMonoBitmap);

APNG.Free;
end;

Текст ошибки: Floating point divizion by zero, выдает ошибку вот на таком
такой строчке

hNewBitmap := CreateDIBSection( DC,PBitmapInfo(BitmapHeader)^, DIB_RGB_COLORS,Bits,0,0);
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:48.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025