t04
10.05.2009, 03:46
Нужна помощь в отправке переменной типа TJpegImage в сокет "на лету" из памяти. вариант сохранить в файл а затем отправлять не предлагать
перевожу сначала Jpeg в MemoryStream а затем стрим копирую в буфер, но уже при самом переводе из jpeg в memorystream облом какойто, размер картинки в два раза растет, а при передаче в буфер совсем ноль, может существует способ непосредственно используя переменную jpeg отправлять в сокет? :(
procedure SendJpeg(JpegName:String);
const
PACKET_DATA_SIZE = 16777216;//16*1024*1024//16ÌÁ
type
PByteArray = ^TByteArray;
TByteArray = array[0..PACKET_DATA_SIZE-1] of byte;
var
Buf : PByteArray;
jpg : TJpegImage;
MemStream : TMemoryStream;
flw : File;
begin
jpg := TJpegImage.Create;
MemStream := TMemoryStream.Create;
try
jpg.LoadFromFile(JpegName);
try
jpg.SaveToStream(MemStream);
GetMem(Buf,MemStream.Size);
MemStream.WriteBuffer(Buf^,MemStream.Size);
SendBuf(Sock,Buf^,MemStream.Size);
jpg.SaveToFile('1.jpg');//сохраняется файл размером 3 кб
MemStream.SaveToFile('C:\2.jpg');//сохраняется файл размером 6 кб
AssignFile(flw,'C:\3.jpg');
ReWrite(flw,1);
BlockWrite(flw,buf^,MemStream.Size);//ничего не сохраняется
CloseFile(flw);
FreeMem(Buf);
finally
end;
finally
jpg.free;
MemStream.Free;
end;
end;
перевожу сначала Jpeg в MemoryStream а затем стрим копирую в буфер, но уже при самом переводе из jpeg в memorystream облом какойто, размер картинки в два раза растет, а при передаче в буфер совсем ноль, может существует способ непосредственно используя переменную jpeg отправлять в сокет? :(
procedure SendJpeg(JpegName:String);
const
PACKET_DATA_SIZE = 16777216;//16*1024*1024//16ÌÁ
type
PByteArray = ^TByteArray;
TByteArray = array[0..PACKET_DATA_SIZE-1] of byte;
var
Buf : PByteArray;
jpg : TJpegImage;
MemStream : TMemoryStream;
flw : File;
begin
jpg := TJpegImage.Create;
MemStream := TMemoryStream.Create;
try
jpg.LoadFromFile(JpegName);
try
jpg.SaveToStream(MemStream);
GetMem(Buf,MemStream.Size);
MemStream.WriteBuffer(Buf^,MemStream.Size);
SendBuf(Sock,Buf^,MemStream.Size);
jpg.SaveToFile('1.jpg');//сохраняется файл размером 3 кб
MemStream.SaveToFile('C:\2.jpg');//сохраняется файл размером 6 кб
AssignFile(flw,'C:\3.jpg');
ReWrite(flw,1);
BlockWrite(flw,buf^,MemStream.Size);//ничего не сохраняется
CloseFile(flw);
FreeMem(Buf);
finally
end;
finally
jpg.free;
MemStream.Free;
end;
end;