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

Вниз

Выделение памяти массивам и про Graphic32   Найти похожие ветки 

 
Camedia   (2003-08-15 22:22) [0]

Есть следующий код:

unit unitEditor;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
GR32_Image, ExtCtrls, DXClass, unitMap, GR32;

type
TformEditor = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
formEditor: TformEditor;

const MW = 25; // Map Width
MH = 18; // Map Height
CW = 32; // Cell Width
CH = 32; // Cell Height

type TGroundCell = record
textGrass: TBitmap32;
textWater: TBitmap32;
tileLower: TBitmap32;
tileHigher: TBitmap32;
end;

type TGround = record
Cell: TGroundCell;
end;

var Map: array [1..MW, 1..MH] of TGround;

procedure FreeMap;

procedure FillMap;

implementation

{$R *.DFM}

procedure FillMap;
var x0, y0: Integer;
begin
For y0 := 1 to MH do
For x0 := 1 to MW do
begin

With Map[x0, y0].Cell do
begin
textGrass := TBitmap32.Create;
textGrass.SetSize(CW, CH);
textGrass.Clear;

textWater := TBitmap32.Create;
textWater.SetSize(CW, CH);
textWater.Clear;

tileLower := TBitmap32.Create;
tileLower.SetSize(CW, CH);
tileLower.Clear;

tileHigher := TBitmap32.Create;
tileHigher.SetSize(CW, CH);
tileHigher.Clear;
end;
end;
end;

procedure FreeMap;
var x0, y0: Integer;
begin
For y0 := 1 to MH do
For x0 := 1 to MW do
begin

With Map[x0, y0].Cell do
begin
textGrass.Free;
textWater.Free;
tileLower.Free;
tileHigher.Free;
end;
end;
end;

procedure TformEditor.FormCreate(Sender: TObject);
begin
FillMap;
end;

procedure TformEditor.FormDestroy(Sender: TObject);
begin
FreeMap;
end;

end.

При выполнении он выдаёт исключение Can"t allocate DIB handle. Я понимаю, что многие не работали с Graphic32, но я так подозреваю, что ошибка не в нём. Я так посчтиал - треюуется для выполнения этого кода более 10 мегабайт памяти: 32 x 32 x 4 x 4 x 25 x 18, не считая заголовочной информации. При этом вылетает постоянно на одном и том же элементе если не менять значения CW и CH. И это не зависит вроде бы от того, созданы другие TBitmap32 или нет. Видимо, что-то связано с двумерным массивом. Может, под него выделяется какое-то слишком малое количество памяти, которое нельзя превышать?


 
Camedia   (2003-08-15 22:31) [1]

Забыл уточнить, что вылетает при SetSize одного из полей записи, при этом это точно не ошибка SetSize, так как заменял этот код и на Width := ..., Height := ..., и даже на просто LoadFromFile изображения 32х32.



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

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

Наверх




Память: 0.47 MB
Время: 0.036 c
7-1700
AJ_UA
2003-06-13 15:50
2003.09.01
Как узнать какие библиотеки DLL сейчас запущены в оперативке?


3-1331
ZyXEL
2003-08-07 16:17
2003.09.01
Мастера, срочно нужна помощь по Excel и ADO !!!


14-1670
Шишкин Илья
2003-08-12 12:59
2003.09.01
Кто-нибудь разбирается в музыке?


14-1622
keymaster
2003-08-13 15:06
2003.09.01
Формат PDF


4-1730
boa
2003-06-30 08:46
2003.09.01
Как убить зависший поток?