Вниз
Скачать: CL | DM;

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

← →
SkyQuake ©   (2002-07-04 19:04) [0]

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

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!
Почему?


← →
Volj ©   (2002-07-04 19:09) [1]

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


← →
Skier ©   (2002-07-04 19:15) [2]

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


← →
SkyQuake ©   (2002-07-04 19:21) [3]

>Volj
Дык ведь TPicture

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


← →
Volj ©   (2002-07-04 19:26) [4]

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


← →
Юрий Зотов ©   (2002-07-04 19:29) [5]

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

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



← →
SkyQuake ©   (2002-07-04 19:30) [6]

>Volj
TJPEGImage


← →
Skier ©   (2002-07-04 19:32) [7]

>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:38) [8]

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


← →
Volj ©   (2002-07-04 19:40) [9]

Дык MStream.Size


← →
Юрий Зотов ©   (2002-07-04 19:44) [10]

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


← →
SkyQuake ©   (2002-07-04 19:46) [11]

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


← →
Volj ©   (2002-07-04 19:48) [12]

...
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);...


← →
Volj ©   (2002-07-04 19:52) [13]

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


← →
SkyQuake ©   (2002-07-04 19:53) [14]

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

Size:=Length(string(Buf));

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



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.016 c
14-47754
ev
2002-06-01 20:10
2002.07.15
встреча мастеров в Москве !


7-47850
Doom
2002-04-24 16:28
2002.07.15
как прописать автозагрузку в WIN.INI?


3-47103
leopoldo
2002-06-14 13:40
2002.07.15
Требуется помощь по таблице БД (Paradox)!!!


1-47386
First_May
2002-07-02 10:08
2002.07.15
Форма + DLL


7-47819
_max_
2002-04-21 11:25
2002.07.15
Help. NetCard




   Наверх