首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

透过头文件读取和设置JPG图片的DPI

2012-12-21 
通过头文件读取和设置JPG图片的DPI我目前已经实现了JFIF格式的jpg图片的DPI的读取和设置,代码如下:procedu

通过头文件读取和设置JPG图片的DPI
我目前已经实现了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?

热点排行