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

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

Только первые пять байт...


SkyQuake ©   (2002-07-04 19:04:00) 

Пишу значить так:

var Buf: PChar;
...
MStream:= TMemoryStream.Create;
Image1.Picture.LoadFromFile("picture.jpg");
Image1.Picture.Graphic.SaveToStream(MStream);
MStream.Position:=0;
GetMem(Buf,MStream.Size);
MStream.Read(Buf^,MStream.Size);


И сколько вы думаете Buf? Аж целых пять первых байт picture.jpg!
Почему?


SkyQuake   (2002-07-04 19:53:00) [1]

>Volj
Вобщем забудь про MStream.
Просто надо определить размер Buf^.
И я это сделал как то коряво:

Size:=Length(string(Buf));

Ведь работает...


Volj   (2002-07-04 19:52:00) [2]

А вообще, если объявлять Buf: Pointerи использовать TMemoryStream, то роль Bufпрекрасно исполняет
MStream.Memory


Volj   (2002-07-04 19:48:00) [3]

...
MStream:= TMemoryStream.Create;
Image1.Picture.LoadFromFile("picture.jpg");
Image1.Picture.Graphic.SaveToStream(MStream);
MStream.Position:=0;
GetMem(Buf,MStream.Size);

--> В этот момент - не пуст!
MStream.Read(Buf^,MStream.Size);...


SkyQuake   (2002-07-04 19:46:00) [4]

>Volj
Нет. MStream, допустим пуст, а Buf^ содержт необходимые данные (картинку) причём SizeOf(Buf^) даёт нуль. Как узнать размер данных на которые указывает Buf?


Юрий Зотов   (2002-07-04 19:44:00) [5]

Оно и раньше работало, но ВИДЕЛИ вы только до первого нуля. Сказали PChar - вот Вам и показывают ASCIIZ, ничего странного.


Volj   (2002-07-04 19:40:00) [6]

Дык MStream.Size


SkyQuake   (2002-07-04 19:38:00) [7]

>Юрий Зотов
Звменил. Работает.
Но вот вопрос как теперь определить размер данных на которые указывает Buf?


Skier   (2002-07-04 19:32:00) [8]

>SkyQuake
Копировать Stream в PChar это что-то новое !

Если приспичило, то лучше так :


var
StrStream: TStringStream;
MStream : TMemoryStream;
begin
MStream:= TMemoryStream.Create;
StrStream:= TStringStream.Create(EmptyStr);
Image1.Picture.LoadFromFile("testimg.jpg");
Image1.Picture.Graphic.SaveToStream(MStream);
MStream.Position := 0;
StrStream.CopyFrom(MStream, MStream.Size);
//получишь результат в StrStream.DataString
MStream.Free;
StrStream.Free;
end;


SkyQuake   (2002-07-04 19:30:00) [9]

>Volj
TJPEGImage


Юрий Зотов   (2002-07-04 19:29:00) [10]

Попробуйте изменить PChar на Pointer:
var Buf: Pointer;

Если заработает - назову причину.


Volj   (2002-07-04 19:26:00) [11]

Блин (это я себе):
Image1.Picture.Graphic.ClassName?
Только не отвечай, что TGraphic...


SkyQuake   (2002-07-04 19:21:00) [12]

>Volj
Дык ведь TPicture

>Skier
По моему замыслу - содержимое MStream...


Skier   (2002-07-04 19:15:00) [13]

>SkyQuake
А что ты вообще-то хочешь загнать в Buf ???


Volj   (2002-07-04 19:09:00) [14]

Какой у тебя
Image1.Picture.ClassType?


Наверх

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