Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.013 c
2-1140782253
HellSing
2006-02-24 14:57
2006.03.12
Массив из Label ов


15-1140016954
Хинт
2006-02-15 18:22
2006.03.12
Проблема с Indy10


15-1140287806
lookin
2006-02-18 21:36
2006.03.12
Высоцкий


2-1140768616
evgenij_
2006-02-24 11:10
2006.03.12
Русский хелп для Дельфина


11-1121302017
stals
2005-07-14 04:46
2006.03.12
exe-шник (? kb)





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