我目前已经实现了JFIF格式的jpg图片的DPI的读取和设置,代码如下:
procedure GetResJpg(JPGFile: string;var HorzRes, VertRes: Word);
const
BufferSize = 50;
var
Buffer: string;
Index: integer;
FileStream: TFileStream; DP: Byte;
Measure: string;
begin
FileStream := TFileStream.Create(JPGFile,fmOpenReadWrite);
try
SetLength(Buffer, BufferSize);
FileStream.Read(buffer[1], BufferSize);
Index := Pos('JFIF' + #$00, buffer);
if Index > 0 then
begin
FileStream.Seek(Index + 6, soFromBeginning);
FileStream.Read(DP, 1);
case DP of
1: Measure := 'DPI'; //Dots Per Inch
2: Measure := 'DPC'; //Dots Per Cm.
end;
FileStream.Read(HorzRes, 2); // x axis
HorzRes := Swap(HorzRes);
FileStream.Read(VertRes, 2); // y axis
VertRes := Swap(VertRes);
end
finally
FileStream.Free;
end;
end;procedure TForm1.SetJpgdpi(filename: string; dpix, dpiy: Integer);
const
BufferSize = 50;
DPI = 1; {inch}
DPC = 2; {cm}
var
Buffer: string;
index: Integer;
FileStream: TFileStream;
xResolution: WORD;
yResolution: WORD;
typeA: Byte;
begin
FileStream := TFileStream.Create(filename, fmOpenReadWrite);
try
SetLength(Buffer, BufferSize);
FileStream.Read(buffer[1], BufferSize);
index := Pos('JFIF' + #$00, buffer);
if index > 0 then
begin
FileStream.Seek(index + 6, soFromBeginning);
typeA := DPI;
FileStream.write(typeA, 1);
xresolution := swap(dpix);
FileStream.write(xresolution, 2);
yresolution := swap(dpiy);
FileStream.write(yresolution, 2);
end
finally
FileStream.Free;
end;
end;
但是我发现有的有一些jpg图片不能读取也不能设置,仔细研究发现,头文件的信息里没有'JFIF',我理解为不是JFIF格式,请问有什么办法能够读取和设置各种格式JPG图片的DPI?
procedure GetResJpg(JPGFile: string;var HorzRes, VertRes: Word);
const
BufferSize = 50;
var
Buffer: string;
Index: integer;
FileStream: TFileStream; DP: Byte;
Measure: string;
begin
FileStream := TFileStream.Create(JPGFile,fmOpenReadWrite);
try
SetLength(Buffer, BufferSize);
FileStream.Read(buffer[1], BufferSize);
Index := Pos('JFIF' + #$00, buffer);
if Index > 0 then
begin
FileStream.Seek(Index + 6, soFromBeginning);
FileStream.Read(DP, 1);
case DP of
1: Measure := 'DPI'; //Dots Per Inch
2: Measure := 'DPC'; //Dots Per Cm.
end;
FileStream.Read(HorzRes, 2); // x axis
HorzRes := Swap(HorzRes);
FileStream.Read(VertRes, 2); // y axis
VertRes := Swap(VertRes);
end
finally
FileStream.Free;
end;
end;procedure TForm1.SetJpgdpi(filename: string; dpix, dpiy: Integer);
const
BufferSize = 50;
DPI = 1; {inch}
DPC = 2; {cm}
var
Buffer: string;
index: Integer;
FileStream: TFileStream;
xResolution: WORD;
yResolution: WORD;
typeA: Byte;
begin
FileStream := TFileStream.Create(filename, fmOpenReadWrite);
try
SetLength(Buffer, BufferSize);
FileStream.Read(buffer[1], BufferSize);
index := Pos('JFIF' + #$00, buffer);
if index > 0 then
begin
FileStream.Seek(index + 6, soFromBeginning);
typeA := DPI;
FileStream.write(typeA, 1);
xresolution := swap(dpix);
FileStream.write(xresolution, 2);
yresolution := swap(dpiy);
FileStream.write(yresolution, 2);
end
finally
FileStream.Free;
end;
end;
但是我发现有的有一些jpg图片不能读取也不能设置,仔细研究发现,头文件的信息里没有'JFIF',我理解为不是JFIF格式,请问有什么办法能够读取和设置各种格式JPG图片的DPI?
有没有系统API直接读取的?
TGpImage.GetHorizontalResolution
TGpImage.GetVerticalResolution 设置:
TGpImage.SetHorizontalResolution
TGpImage.SetVerticalResolution
http://code.google.com/p/ccr-exif