Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.15;
Скачать: 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 вся ветка

Текущий архив: 2002.07.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
1-47391
w666w
2002-07-02 10:40
2002.07.15
SOS. MSHTML в дауне...


3-47157
Hermit
2002-06-18 17:03
2002.07.15
SET EXPLAIN ON


4-47886
strel
2002-05-13 18:25
2002.07.15
Ошибка при выполнении (


1-47528
Arthur1
2002-07-04 14:06
2002.07.15
Как получить путь зущеной программы.


3-47174
Egor_M
2002-06-18 13:04
2002.07.15
Цветная DBGrid