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

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

Загрузка данных в Image [D5, Win95/98]


SkyQuake ©   (2002-07-04 14:31:00) 

Люди проблема следующая. Есть: Image, файл с картинкой и файл содержащий разного рода информацию в т.ч. картинки разных форматов. Моя задача прочитать картинку из файла, и я это делаю так:
BlocRead (f,Buf^,Size)
но вот как теперь запихнуть это в Image?
Пусть формат jpg, тогда все манипуляции с Picture.Bitmapотпадают. Если предложение будет ипользовать TMemoryStream, то плиз не поленитесь сначала протестировать, потому как все мои попытки закончились - Access violation ...


SkyQuake   (2002-07-04 17:39:00) [1]

>Skier Спасибо за заботу. Но у меня выкристализовалось (ого:) следующее решение:

Значить когда битмап
поступаем так:


Image1.Picture.LoadFromFile("picture.bmp");
Image1.Picture.Graphic.SaveToStream (Stream);
Stream.Position:=0;
Image2.Picture.Graphic.LoadFromStream (Stream);


А когда jpeg


Uses JPEG;

var
stream: TMemoryStream;
j: TJPEGImage;
begin
j:= TJPEGImage.Create;
stream:= TMemoryStream.Create;
try
Image1.Picture.LoadFromFile("picture.jpg");
Image1.Picture.Graphic.SaveToStream(Stream);
Stream.Position:=0;
Image2.Picture.Graphic := j;
Image2.Picture.Graphic.LoadFromStream(Stream);
finally
stream.Free;
j.Free;
end;


Огромное СПАСИБО Uncle Budda(в одиге) за совет


Skier   (2002-07-04 17:22:00) [2]

>SkyQuake

Может это подойдёт :


var
AJPEGImage : TJPEGImage;
AStream : TFileStream;
begin

AJPEGImage := TJPEGImage.Create;
AStream := TFileStream.Create("E:\###\333\testimg.jpg", fmOpenRead);
try
AJPEGImage.LoadFromStream(AStream);
AJPEGImage.DIBNeeded;
Image1.Picture.Bitmap.Assign(AJPEGImage);
finally
AStream.Free;
AJPEGImage.Free;
end; //try

AStream := TFileStream.Create("E:\###\333\testimg.bmp", fmCreate);
try
Image1.Picture.Bitmap.SaveToStream(AStream);
finally
AStream.Free;
end; //try

end;


Volj   (2002-07-04 17:18:00) [3]

"А на TJPEGImage компилятор ругается" - uses JPEG.
А для преобразований форматов можно использовать обычный Assign (но только после того, как нужный формат будет загружен)


SkyQuake   (2002-07-04 17:09:00) [4]

1. Мне нужно отобразить в TImage-е то что находится в Stream
2. Мне нужно скинуть в Stream то что находится в TImage-е
А на TJPEGImage компилятор ругается. Грит незнаю такого идинтификатора. Во, как.


Skier   (2002-07-04 16:59:00) [5]

>SkyQuake
Тебе нужно просто прочесть jpeg и
отобразить его в TImage-e ? (А дальше ты знаешь как действовать...) И это всё.
Так я понял ?


SkyQuake   (2002-07-04 16:55:00) [6]

>Skier
То есть ты пркдлагаешь таскать из формата в формат одну и ту же картинку, ведь сохранять в тот самый файл (большой который с разного рода данными) я захочу в jpeg"е. А если я буду туда сюда преобразовывать каженый раз, то чегож у меня будет после 10-15 открытий сохранений?


Skier   (2002-07-04 16:49:00) [7]

>SkyQuake
Грузи не в Image1.Picture а в TJPEGImage !

TJPEGImage.LoadFromFile("picture.jpg");
потом TJPEGImage.DIBNeeded (?)

И будет тебе BMP...


SkyQuake   (2002-07-04 16:40:00) [8]

Проблема более или менее локализовалась.
Например с bmp файлом проходит всё отлично, а вот с jpg-ом не идёт. На строке
Image2.Picture.Graphic.LoadFromStream (Stream)
выдаёт "Acces violation ..."
То есть я пишу так:
Image1.Picture.LoadFromFile("picture.jpg");
Image1.Picture.Graphic.SaveToStream (Stream);
Stream.Position:=0;
Image2.Picture.Graphic.LoadFromStream (Stream);

и ошибка...


Volj   (2002-07-04 15:12:00) [9]

2SkyQuake
Извини, я неправильно понял subj. А у тебя как записаны данные в файл? Через SaveToStream или нет?


Skier   (2002-07-04 15:06:00) [10]

>SkyQuake
Посмотри описание TJPEGImage.DIBNeeded


SkyQuake   (2002-07-04 15:02:00) [11]

>Skier
Нет, спасибо конечно за полезную инфу. Но фишка в том что я имею данные в jpg, а не в bmp. То есть файл тот как бы содержит в себе файл "картинка.jpg" и я не хочю (могу конечно и так) сначала записывать на диск, а потом юзать .LoadFromFile
потому как это - смотри выше:)


SkyQuake   (2002-07-04 14:48:00) [12]

То Volj.
Обьясняю данные мои в некоем файле. Ты предлагаеш сначала их в файл кинуть и только потом оттедова грузить? Это знаешли per rectum(через задницу).


Skier   (2002-07-04 14:47:00) [13]

>SkyQuake
http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988625147&n=21


SkyQuake   (2002-07-04 14:41:00) [14]

Дык ведь говорю же что ни чего с потоками не выходит. Пишу:
Image1.Picture.Graphic.SaveToStream (Stream)
затем
Image2.Picture.Graphic.LoadFromStream (Stream)
и ни чего в Image2 не появляется. Я и так и эдак его... Нуль!


Volj   (2002-07-04 14:37:00) [15]

Зачем так извращаться...
TJpegImage.LoadFromFile
А что касается других форматов - ...


Skier   (2002-07-04 14:34:00) [16]

>SkyQuake

> тогда все манипуляции с Picture.Bitmap отпадают

А Picture.Graphic не подойдёт ?


Наверх

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