Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
ВнизВыделение памяти массивам и про 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c