Главная страница
    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.012 c
2-1140769646
unlink
2006-02-24 11:27
2006.03.12
сравнение методов сортировки


15-1139984335
Vlad Oshin
2006-02-15 09:18
2006.03.12
Как поставить Windows на комп, если:


15-1140210575
Compton's G
2006-02-18 00:09
2006.03.12
Уравнение прямой с угловым коефициентом


2-1140432254
Id
2006-02-20 13:44
2006.03.12
Запрос


15-1140442412
7BB
2006-02-20 16:33
2006.03.12
Читал недавно что Борланд остановил работы над Дельфи и C++!





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