Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-1543
MegaVolt
2003-06-26 15:44
2003.09.01
Как получить доступ к компутеру с паролем?


3-1308
DmitryA
2003-08-06 18:12
2003.09.01
Apollo


14-1671
Marser
2003-08-12 11:56
2003.09.01
Ну вот, уже две страницы


1-1480
m2003
2003-08-17 14:06
2003.09.01
EAccessViolation при создании экзэмляра класса


1-1503
AZ
2003-08-17 07:46
2003.09.01
Насколько цензурно выражение?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский