![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потоки и картинки, картинки и потоки... [D5, Win95/98]
SkyQuake © (2002-07-04 20:17:00)Я уже, похоже толком заколебал своими потоками и картинками, но вот незадача, пишу:
var Buf: Pointer
...
MStream:= TMemoryStream.Create;
Image1.Picture.LoadFromFile("picture.bmp");
Image1.Picture.Graphic.SaveToStream(MStream);
MStream.Position:=0;
GetMem(Buf,MStream.Size);
MStream.Read(Buf^,MStream.Size);
// Теперь я хочу поместить Buf^ опять в поток и загрузить в картинку
MStream.Clear;
MStream.Write(Buf^,Length(string(Buf)));
asd:=MStream.Size;
ShowMessage(IntToStr(asd));
Image2.Picture.Bitmap.LoadFromStream(MStream);
И Image2 пуст. Зараза:(
MBo (2002-07-05 06:21:00) [1]>SkyQuake
про Position тоже верно, но маразм Length(string(Buf)) ты все-таки не используй.
>kull
В AnsiString можно хранить любые двоичные данные, Length записана независимо, и нули в середине строки ей не помешают, они играют роль лишь при преобразовании в PChar
kull (2002-07-05 01:11:00) [2]Бесполезно Buf к string приводить.
Buf - это двоичные данные, тем более, что среди них как нефиг делать встретится нулевой символ, т.е. конец строки.
SkyQuake (2002-07-04 23:19:00) [3]Блин. Всего то навсего надо было поставить:
MStream.Position:=0;
перед
Image2.Picture.Bitmap.LoadFromStream(MStream);
SkyQuake (2002-07-04 22:58:00) [4]> MBo
И попробывал, а кртинка на Image2 так и не появилась :(
MBo (2002-07-04 20:55:00) [5]Раз уж ты не хочешь хранить объем данных в отдельной переменной, сделай так
var S: String;
...
MStream:= TMemoryStream.Create;
Image1.Picture.LoadFromFile("picture.bmp");
Image1.Picture.Graphic.SaveToStream(MStream);
MStream.Position:=0;
SetLength(S,MStream.Size);
MStream.Read(S[1],MStream.Size);
MStream.Clear;
MStream.Write(S[1],Length(S));
Image2.Picture.Bitmap.LoadFromStream(MStream);
а это: Length(string(Buf)) даже комментировать не хочется
btw: об Assign слышал?