Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как загрузить в массив картинку [D7, WinXP]


Cheguevara ©   (2004-12-31 20:01:00) 

Народ, ответьтте пожалста на вопрос, как сделать так, чтоб массив содержал не string/real и тд. данные, а например картинку. И можно ли вообще такое сделать.


GrayFace   (2005-01-01 01:39:00) [1]

Я описался. Я имел ввиду время, а не память.


begin...end   (2005-01-01 00:47:00) [2]

> [12] GrayFace ©   (01.01.05 00:41)

Ну, во-первых, ты, наверное, хотел сказать, что на array[i,j] требуется в 100 раз больше памяти, чем на Canvas.Pixels[i,j], а не наоборот. А во-вторых, не мог бы ты пояснить, в чём будет проигрыш в памяти по сравнению с Image после загрузки данных о пикселях в массив и уничтожения Image (т.к. оно более для данной задачи не нужно)?


GrayFace   (2005-01-01 00:41:00) [3]

Да вроде бы нет. Во всяком случае, не меньше, чем в 100 раз - это точно.


begin...end   (2005-01-01 00:36:00) [4]

> [10] GrayFace ©   (01.01.05 00:28)

> На один Canvas.Pixels[i,j] требуется в 100 раз больше памяти,
> чем на Array[i,j]

Ничего не путаешь?


GrayFace   (2005-01-01 00:28:00) [5]

begin...end ©   (31.12.04 23:44) [9]
Чем когда?

На один Canvas.Pixels[i,j] требуется в 100 раз больше памяти, чем на Array[i,j] и чем на проделывание этого, используя TBitmap.Scanline.


begin...end   (2004-12-31 23:44:00) [6]

> GrayFace ©   (31.12.04 23:38) [7]

> Ну и способ!

Способ плохой. Никто и не говорил, что он хороший.

> В 2 раза больше памяти и в 100 раз больше времени при конвертации

Чем когда?

> Кстати, цифра 2 откуда взялась?

Ошибся.


GrayFace   (2004-12-31 23:39:00) [7]

С наступившим Новым Г, кстати.


GrayFace   (2004-12-31 23:38:00) [8]

begin...end ©   (31.12.04 20:45) [3]
Ну и способ! В 2 раза больше памяти и в 100 раз больше времени при конвертации. Кстати, цифра 2 откуда взялась?

Картинки надо хранить в TBitmap-ах. Как их редактировать - почитай статью "Поставить точку".


Cheguevara   (2004-12-31 22:44:00) [9]

Ага, я тоже так решил покачто сделать, пока не придумаю получше чегонить.


Vasya.ru   (2004-12-31 22:22:00) [10]

а может путь к картинке в массиве хранить будешь? Уж очень уродски это - саму картинку


Cheguevara   (2004-12-31 20:54:00) [11]

Спасбо баальшое, подумаю, наверное буду использовать всётаки другой способ, так как этот много ресурсов у компа при загрузке жрать будет наверное. Тя тоже с праздником!


begin...end   (2004-12-31 20:45:00) [12]

> [2] Cheguevara   (31.12.04 20:18)

Хранить изображение в массиве можно разными способами. Например, можно хранить в массиве информацию о цвете каждого пикселя. Допустим, есть на форме компонент Image1: TImage, в который загружена картинка. Тогда её можно "занести в массив" так:

var
 I, J: Integer;
 Picture: array of array of TColor;
begin
 SetLength(Picture, Image1.Picture.Height, Image1.Picture.Width);
 for I := 0 to High(Picture) do
   for J := 0 to High(Picture[I]) do
     Picture[I, J] := Image1.Canvas.Pixels[I, J]
end.


Теперь можно "нарисовать" эту картинку на другом экземпляре TImage - Image2:

var
 I, J: Integer;
begin
 for I := 0 to High(Picture) do
   for J := 0 to High(Picture[I]) do
     Image2.Canvas.Pixels[I, J] := Picture[I, J]
end.


Такой способ требует SizeOf(TColor) * 2 = 8 байт для хранения информации о КАЖДОМ пикселе.

Есть и ещё способы. Например, имеется файл с картинкой (BMP, JPG и т.д.). Можно загрузить содержимое этого файла в обычный массив байт (открыть file of Byte, записать с помощью Write, закрыть), а потом использовать.

Выбор зависит от того, какими методами Вы предпочтёте потом с этими данными работать, и того, насколько эти методы требовательны к ресурсам.

Засим позвольте откланяться - начинаю праздновать. :-)

С наступающим (или наступившим)!


Cheguevara   (2004-12-31 20:18:00) [13]

Ну просто я хочу попробовать сделать игрушку не прибегая к помощи дельфиХа и других способов. Знаю что это не самый экономичный к ресурсам компа способ, у меня уже есть несоклько других мыслей, но всё равно я хочу его попробовать.


begin...end   (2004-12-31 20:04:00) [14]

> Cheguevara   (31.12.04 20:01)

Такое сделать можно. Но почему у Вас возникла такая необходимость - хранить "картинку" в массиве?


Наверх

Титульная страница Поиск, карта сайта Написать письмо