Boot изображения ще бъдат OnCreate ().
След LoadImage функция ( "NAME_1", "данни / image_1.bmp");
Т.е. името и пътя.
Получаване е необходимо, чрез функция GetImage (Име: низ): TBitmap;
Т.е. наречен TBitmap.
Досега аз виждам само това решение:
тип
# XA0; TItem = запис
# XA0; # XA0; # XA0; Име: низ;
# XA0; # XA0; # XA0; Bitmap: TBitmap;
# XA0; край;
Item.Name:= име;
Item.Bitmap: = TBitmap;
Item.Bitmap.LoadFromFile ();
Единственият недостатък ListovObektov (съдържащ позоваване на растерни) - gdihendla загуба. Този дефицит лишени ImadzhList, но той продължава да снимки на един и същ размер, липсата на него.
Много зависи от специфичните условия на проблема. И вие можете да напишете вашето ImadzhList с блекджек. Едно платно, маса на компенсации и размери, начин на приготвяне.
Но като цяло, разбира се StringList предпочитане.
Да, изображения с различни размери.
> Но като цяло, разбира се StringList предпочитане.
Докато съм направил чрез него.
> Единственият недостатък ListovObektov (съдържащ позоваване на растерни) -> загуба gdihendla.
Как е? В кое място той загуби?
# XA0;
# XA0; Bitmap: TBitmap;
# XA0; Bitmap.LoadFromFile ();
# XA0; S: TStringList;
# XA0; S.AddObject ( "1", Bitmap);
Тук съм направил класа, не знам какво да правя в случай на изключение в AddImage () при изтеглянето на изображението:
тип
# XA0; TListImages = клас
# XA0; # XA0; конструктор Създаване ();
# XA0; # XA0; деструктор # XA0; унищожи (); отменят;
# XA0; частен
# XA0; # XA0; FList: TStringList;
# XA0; обществен
# XA0; # XA0; процедура AddImage (Конст Име: низ; Конст FileName: низ);
# XA0; # XA0; функция # XA0; GetImage (Конст Име: низ): TBitmap;
# XA0; край;
конструктор TListImages.Create ();
започвам
# XA0; наследствено;
# XA0; FList: = TStringList.Create ();
приключи;
деструктор TListImages.Destroy ();
започвам
# XA0; FreeAndNil (FList);
# XA0; наследствено;
приключи;
процедура TListImages.AddImage (Конст Име: низ; Конст FileName: низ);
Var
# XA0; Bitmap: TBitmap;
започвам
# XA0; Bitmap: = TBitmap.Create ();
# XA0; опитате
# XA0; # XA0; Bitmap.LoadFromFile (FileName);
# XA0; # XA0; Bitmap.PixelFormat: = pf32bit;
# XA0; # XA0; FList.AddObject (име, Bitmap);
# XA0 изключение
# XA0; # XA0; FreeAndNil (Bitmap);
# XA0; край;
приключи;
функционира TListImages.GetImage (Конст Име: низ): TBitmap;
Var
# XA0; Idx: LongInt;
започвам
# XA0; ако (FList.Find (име, Idx))
# XA0; след това Резултат: = (FList.Objects [Idx] като TBitmap)
# XA0; друго Резултат: = нула;
приключи;
процедура TForm1.Button1Click (Sender: TObject);
Var
# XA0; ListImages: TListImages;
# XA0; Bitmap: # XA0; # XA0; TBitmap;
започвам
# XA0; ListImages: = TListImages.Create ();
# XA0; опитате
# XA0; # XA0; ListImages.AddImage ( "IMAGE_1", "1.bmp");
# XA0; # XA0; Bitmap: = ListImages.GetImage ( "IMAGE_1");
# XA0; # XA0; ако (целеви (Bitmap))
# XA0; # XA0; след това Canvas.Draw (25, 25, Bitmap)
# XA0; # XA0; друго ShowMessage ( "Грешка");
# XA0; накрая
# XA0; # XA0; FreeAndNil (ListImages);
# XA0; край;
приключи;
Методът за добавяне на ви унищожи зареден растерна графика и да го няма. Вземете картофки.
В деструктора добавят растерни пречистване (налични за всеки цикъл).
Да IMHO добавите метод трябва да връща на растерна графика, а също и за да се провери дали има вече с това име, и да го върне, ако има.
> Това е как? В кое място той загуби?
Докато Hammer, счупи ми обясни. За себе си чете в Google GDI дръжка
Той унищожен, ако по изключение се случва по време на LoadFromFile ()
Това просто не е ясно за мен, дали е правилното нещо да направя.
> В деструктора добавят растерни пречистване (налични за всеки цикъл).
> Да, IMHO, добавете начин трябва да връща на растерна графика, а също така да се провери
> Има ли вече с това име, и да го върне, ако има.
Не мисля, че имам нужда от него.
> Край Демонстрация HDI Хендли
В нашия списък от където течът е?
В крайна сметка, се нарича FreeAndNil ()
> В нашия списък от където течът е?
Това не е теч. Просто GDi.Handel ценен ресурс е ограничен до 8-10 хиляди. Използва се за събиране на цялото във формуляра. И когато създавате TBitmap тя се изразходва.
Ако списъкът е голям 8-10 хиляди души, а след това програмата няма да работи коректно.
Не мисля, че толкова много се нуждаят растерни изображения.
> Това не е теч. Просто GDi.Handel ценен ресурс е ограничен до 8-10 хиляди.
А Bitmap.Dormant - след "употреба" - освобождаване на дръжката GDI - до следващото "необходимостта".
Какво за цяло да запази един куп растерни изображения? Това е усложнение на GDI? Ако те са малки, е по-добре да се поддържа една растерна графика и изрежете битовете, които искате, ако голямата смесения магазин на диск, и ако е необходимо да се потопи, ако на диска, за да заредите бавно, а след това да ги изтеглите предварително списък на потоци и само един кораб в движение в растерна графика.
> Това е с струни GDI?
Това, което много GDI ресурси дърпа 1 TBitmap?
В идеята е една HBITMAP и DIB сечение, не много трябва да бъде.
конструктор TListImages.Create ();
започвам
# XA0; наследствено;
# XA0; FList # XA0; # XA0; # XA0; # XA0; # XA0; : = TStringList.Create ();
# XA0; FList.Duplicates: = dupError;
# XA0; FList.Sorted # XA0; # XA0 ;: = True;
приключи;
деструктор TListImages.Destroy ();
Var
# XA0; I: # XA0; # XA0; # XA0; LongInt;
# XA0; Bitmap: TBitmap;
започвам
# XA0, защото аз: = 0 до FList.Count - 1 направя // ако се прави тук, е вярно? Сам FList изчиства връзки?
# XA0; започне
# XA0; # XA0; Bitmap: = (FList.Objects [I] като TBitmap);
# XA0; # XA0; FreeAndNil (Bitmap);
# XA0; край;
функция TListImages.AddImage (Конст Име: низ; Конст FileName: низ): Булева;
Var
# XA0; Bitmap: TBitmap;
започвам
# XA0; Bitmap: = TBitmap.Create ();
# XA0; опитате
# XA0; # XA0; Bitmap.LoadFromFile (FileName);
# XA0 изключение # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; // правилно с изключение така?
# XA0; # XA0; FreeAndNil (Bitmap);
# XA0; край;
# XA0; ако Резултат след това
# XA0; започне
# XA0; # XA0; FList.AddObject (име, Bitmap);
функционира TListImages.GetImage (Конст Име: низ): TBitmap;
Var
# XA0; Idx: LongInt;
започвам
# XA0; ако (FList.Find (име, Idx))
# XA0; след това Резултат: = (FList.Objects [Idx] като TBitmap)
# XA0; друго Резултат: = нула;
приключи;
> // правилно с изключение така?
Е, както казвате. Формално, всичко е наред, но защо не се зареждат растерни няма да знае. Може би си заслужава, след FreeAndNil (Bitmap); добави повишение?
Свързани статии