procedure BGR2RGB(var bmp:TBitmap);
var
x,y:integer; t:char; data:pchar;
begin
for y:=bmp.Height-1 downto 0 do
begin
data:=bmp.ScanLine[y];
for x:=0 to bmp.Width-1 do
begin
t:=data[x*3];
data[x*3]:=data[x*3+2];
data[x*3+2]:=t;
end;
end;
end;
var
fstream:Tfilestream; mstream:Tmemorystream;
j,i:word;data:pchar; buf:array [0..3] of byte;
filesize:DWORD; fjpg:Tjpegimage;bmp:Tbitmap;
begin
result:=nil;
fstream:=Tfilestream.create(filename,fmOpenRead);
//建立文件流,读JPEG文件
fstream.Seek(20,soFromBeginning); //FF ED段在文件的第20个字节 处
fstream.Read(buf,sizeof(buf));
if PWORD(@buf[0])^=$EDFF then
begin
j:=buf[2]*256+buf[3]; //FF ED的大小,高位在前,低位在后
if j<1024 then //FF ED段的大小若为1024个字节则文件不包含缩览图,退出程序
begin
fstream.free;
exit;
end;
mstream:=TMemorystream.Create;//建立内存流
mstream.CopyFrom(fstream,j); //把FF ED段拷贝到mstream
data:=mstream.Memory;
for i:=300 to 700 do //找缩览图的开始标志FF D8
if PWORD(@data[i])^=$D8FF then break;
if i<700 then
begin
fjpg:=Tjpegimage.Create; //建立TJPEGimage 解出缩览图
bmp:=TBitmap.Create;
mstream.Position:=i;
fjpg.LoadFromStream(mstream);//fjpg读取mstream
bmp.Assign(fjpg); //JPEG转BMP
if PWORD(@data[i+57])^=$2e34 then //PhotoShop 4.0的缩览图