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

Вниз

Как загрузить в массив картинку   Найти похожие ветки 

 
Cheguevara   (2004-12-31 20:01) [0]

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


 
begin...end ©   (2004-12-31 20:04) [1]

> Cheguevara   (31.12.04 20:01)

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


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

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


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

> [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:54) [4]

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


 
Vasya.ru ©   (2004-12-31 22:22) [5]

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


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

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


 
GrayFace ©   (2004-12-31 23:38) [7]

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

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


 
GrayFace ©   (2004-12-31 23:39) [8]

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


 
begin...end ©   (2004-12-31 23:44) [9]

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

> Ну и способ!

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

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

Чем когда?

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

Ошибся.


 
GrayFace ©   (2005-01-01 00:28) [10]

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

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


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

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

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

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


 
GrayFace ©   (2005-01-01 00:41) [12]

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


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

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

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


 
GrayFace ©   (2005-01-01 01:39) [14]

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



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

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

Наверх




Память: 0.5 MB
Время: 0.049 c
4-1101717711
NazGul
2004-11-29 11:41
2005.01.16
Как добавить новый сервис Winsows NT&?


14-1103990640
Fima_MS
2004-12-25 19:04
2005.01.16
Линки может у кого есть?


14-1104320614
TUser
2004-12-29 14:43
2005.01.16
Есть ли такой эксперт


4-1101384391
OlegTrubin
2004-11-25 15:06
2005.01.16
MapViewOfFile - ошибка


1-1104404068
ItMan_
2004-12-30 13:54
2005.01.16
AllocMemCount и AllocMemSize возвращают 0