Вниз
Скачать: 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.47 MB
Время: 0.008 c
3-47124
Ramil
2002-06-21 21:09
2002.07.15
У кого получался сетевой IB под win95/98


1-47396
Андрусь
2002-07-01 12:51
2002.07.15
Подскажите message


3-47143
Deschanel
2002-06-18 18:44
2002.07.15
delphi+mssql+ado


1-47247
Валет
2002-06-28 14:42
2002.07.15
Bmp


6-47638
DenNNis
2002-04-30 08:00
2002.07.15
Мастерам




   Наверх