抢分(50分)

  • 主题发起人 主题发起人 yucy
  • 开始时间 开始时间
Y

yucy

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将*.jpg文件先送TMemoryStream,然后在显示在image中[不要求直接显示]
var
AJPEG: TJPEGImage;
mem : TMemoryStream;
bitmap: TBitMap;

procedure TForm1.Button1Click(Sender: TObject);
var
x,y:integer;
begin
bitmap:=TBitMap.Create;
mem:=TMemoryStream.Create;
AJpeg:=TJpegImage.Create;

//AJpeg.LoadFromFile('d:/d_jpg/71.jpg');
//Form1.Canvas.Rectangle(2,2,560,430);
//x:=10; y:=10;
//Form1.Canvas.Draw(x,y,AJpeg);

mem.Clear;
mem.Position := 0;
mem.LoadFromFile('d:/d_jpg/75.jpg');

image1.Picture.Bitmap.LoadFromStream(mem); //问题出在该句
bitmap.free;
mem.Free;
AJpeg.Free;
end;
 
厉害 ,这样的方法也想的出。
姑且不说在 mem.LoadFromFile 后应使 mem.Position:=0;
这个概念错误更大。
mem.LoadFromFile 是把 文件的实际数据忠实读入流中。
而文件的数据格式和 Bitmap.SavetoStream 时的数据格式根本是两回事
怎么能不出问题。

你这样吧。

AJpeg.LoadFromFile('d:/d_jpg/71.jpg');
Image1.Picture.Bitmap.Assign(AJpeg);
OK!
把 Tbitmap 和 TmemoryStream 都省了吧
 
我也觉得没有必要用MemoryStream,除非你有特别需要。
 
同意 GGCAT
 
我这里必须用MemoryStream,因为'd:/d_jpg/71.jpg'是通过MemoryStream传送来的。
 
那就把
AJpeg.LoadFromFile('d:/d_jpg/71.jpg');
Image1.Picture.Bitmap.Assign(AJpeg);

该成
AJpeg.LoadFromStream(Astream);
Image1.Picture.Bitmap.Assign(AJpeg);

注意,发送端 也要是
Bjpeg.SavetoStream(BStream);
 
GGCAT你好,这50大洋是你的了
 

Similar threads

回复
2
查看
144
年轻和尚
S
回复
4
查看
339
sundayyoung
S
后退
顶部