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

Вниз

TMemoryStream   Найти похожие ветки 

 
BigLoy   (2006-02-22 11:40) [0]

Не получается записать в MemoryStream определенную часть файла:
var ms: TMemoryStream;
    F: file;
    MCount: LongInt;

    MyJpeg: TJpegImage;
    Image1: TImage;
...
ms:= TMemoryStream.Create;
MyJpeg:= TJpegImage.Create;
Assign(F, "PictureContayner.dat");
Reset(F, 1);
BlockRead(F, MCount, SizeOf(MCount));

//ну, а здесь мне необходимо в ms прочитать/записать MCount байтов
 .....
//и далее желательно
MyJpeg.LoadFromStream(ms);
Image1.Picture.Assign(MyJpeg);
Close(F);


В PictureContayner.dat, сохранены Jpeg в формате: размер Jpeg, сам Jpeg, размер Jpeg, сам Jpeg ...
Задача, последовательно доставать из файла эти изображения ...
Чем можно мне помочь? Спасибо


 
Alkid ©   (2006-02-22 11:45) [1]

А не проще ли сделать TFileStream, с его помощтю открыть файл и читать
приямо из него картинки?


 
MBo ©   (2006-02-22 11:47) [2]

MyJpeg.LoadFromStream встает в начало потока и читает всё, что есть.
Таки образом, нужно скопировать кусок в дополнительный поток CopyFrom, а оттуда уже загружать JPEG


 
Alarm ©   (2006-02-22 12:00) [3]

>Alkid ©   (22.02.06 11:45) [1]
не проще, контейнер формируется из блоб полей динамически
>MBo ©   (22.02.06 11:47) [2]
Спасибо, попытаюсь ...


 
Johnmen ©   (2006-02-22 12:02) [4]

...
AssignFile(F, "PictureContayner.dat");
...
ms.SetSize(MCount);
BlockRead(F, ms, MCount);
...


 
Alkid ©   (2006-02-22 12:21) [5]


> ...
> AssignFile(F, "PictureContayner.dat");
> ...
> ms.SetSize(MCount);
> BlockRead(F, ms, MCount);
> ...

Боюсь так ты просто испортишь экземплярTMemoryStream


 
MBo ©   (2006-02-22 12:21) [6]

>MyJpeg.LoadFromStream встает в начало потока
Это я соврал, нужно самому вставать в начало


procedure TForm3.Button3Click(Sender: TObject);
var
 fs:TFileStream;
 jp:TJpegImage;
 ms:TMemoryStream;
 Sz: Integer;
begin
 //запись
 fs:=TFileStream.Create("D:\data.dat",fmCreate);
 jp:=TjpegImage.Create;
 jp.LoadFromFile("d:\b.jpg");
 ms:=TMemoryStream.Create;
 jp.SaveToStream(ms);
 Sz:=ms.Size;
 fs.Write(Sz,SizeOf(Sz));
 ms.Position:=0;
 fs.CopyFrom(ms,sz);
 fs.Free;

 //чтение
 fs:=TFileStream.Create("D:\data.dat",fmOpenRead);
 fs.Read(Sz,SizeOf(Sz));
 ms.Clear;
 ms.CopyFrom(fs,Sz);
 ms.Position:=0;
 jp.LoadFromStream(ms);
 Canvas.Draw(0,0,jp);
 fs.Free;
 ms.Free;
 jp.Free;
end;



А если есть желание читать в ms  из файла BlockRead, придется использовать Pointer(ms.Memory)^ c предварительным SetSize


 
Johnmen ©   (2006-02-22 12:28) [7]


> Alkid ©   (22.02.06 12:21) [5]
> Боюсь так ты просто испортишь экземплярTMemoryStream


Я не боюсь...:)

>MBo ©   (22.02.06 12:21) [6]
>...использовать Pointer(ms.Memory)^

Зачем приводить к поинтеру, если он уже поинтер? :)
И, кстати, нет, так нельзя...


 
Johnmen ©   (2006-02-22 12:33) [8]


> >MBo ©   (22.02.06 12:21) [6]
> >...использовать Pointer(ms.Memory)^
> И, кстати, нет, так нельзя...


Можно :) ms.Memory^


 
MBo ©   (2006-02-22 12:42) [9]

>Johnmen
верно, приводить к Pointer не нужно



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

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

Наверх




Память: 0.46 MB
Время: 0.012 c
1-1139340371
Gear
2006-02-07 22:26
2006.03.12
True Type для своего приложения


1-1139152821
t0mk4
2006-02-05 18:20
2006.03.12
shurtcut - ссылка на компонент


1-1139296063
Duncan
2006-02-07 10:07
2006.03.12
Шифрование - дешифрование MD5


1-1139411099
Андрей Молчанов
2006-02-08 18:04
2006.03.12
Проблемы с масштабированием


15-1139918164
people
2006-02-14 14:56
2006.03.12
Загрузка linux





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