如何在资源文件中读取JPEG图像?(300分)

  • 主题发起人 主题发起人 anna_zb
  • 开始时间 开始时间
A

anna_zb

Unregistered / Unconfirmed
GUEST, unregistred user!
JPEG图像文件已加入资源文件中,但不知如何读取并将其转换为Bitmap。
对于资源文件中的Bitmap图像可以用LoadFromResourceName读取。
 
uses jpeg....
....
var
jpg: tjpegimage;
bmp: tbitmap;
begin
Jpg:=Tjpegimage.Create;
bmp:Tbitmap.create;
try
Jpg.LoadFromFile(FileName);
except
Jpg.Free;
Exit;
end;
Bmp.Width:=Jpg.Width;
Bmp.Height:=Jpg.Height;
Bmp.Canvas.Draw(0,0,Jpg);
Jpg.Free;
bmp.SaveToFile(...);
bmp.free
end;


var
jpg: tjpegimage;
bmp: tbitmap;
begin
jpg:=tjpegimage.create;
bmp:=tbitmap.create;
try
jpg.loadfromfile('c:/test.jpg'); // 随便你用什么方法载入jpg文件
bmp.assign(jpg);
bmp.savetofile('c:/test.bmp'); // 保存为bmp
finally
bmp.free;
jpg.free;
end;
end;

 
编辑JPG.RC文件
jpg1 jpeg 1.jpg
jpg2 jpeg 2.jpg
用BRCC32 JPG.RC
在程序中用
{$r jpg.res}
var
JPg:Tresourcestream;
begin
jpg:=Tresourcestream.create(hinstance,'jpg1','jpeg');
image1.picture.assign(Jpg);
JPg.free;
end;
 
在Delphi中使用TJPEGImage來處理JPEG圖形, 所以要先Use unit jpeg
因為Resource的預設資料型態並沒有JPEG格式, 所以沒有類似API LoadBitmap的用法
而Jpeg圖形也只能以RT_RCDATA格式(自訂義格式)存放於Resource
取用的程式可以如下:

function LoadJpegImage(hModule: THandle; const ResName: string): TJpegImage;
var
JpgRes: TResourceStream;
begin
JpgRes := TSresourceStream.Create(hModule, sResName, RT_RCDATA);
try
Result := TJPEGImage.Create;
try
Result.LoadFromStream(JpgRes);
except
Result.Free;
raise;
end;
finally
JpgRes.Free;
end;
end;
 
综合以上答案已测试成功!
 
后退
顶部