现在的位置: 首页 > 综合 > 正文

获取jpg图片的x,y的分辨率dpi

2013年04月25日 ⁄ 综合 ⁄ 共 2198字 ⁄ 字号 评论关闭
获取jpg图片的x,y的分辨率dpi Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061010091949259.html
怎样取得jpg的呢?

获取JPEG的宽度、高度等信息  
  {   Copyright   Kingron   2002   }  
  function   GetJPEGSize(FileName:   string;   var   Width,   Height:   WORD):   Boolean;  
  const  
      JPEG_FLAG_BEGIN   =   $D8FF;  
      JPEG_FLAG_END   =   $D9FF;  
      JPEG_FRAME   =   $C0FF;  
  var  
      FS:   TFileStream;  
      Flag1,   Flag2:   WORD;  
      B:   Byte;  
   
      procedure   SeekForFrame;  
      type  
          TSegHeader   =   packed   record  
              Flag:   WORD;  
              LenHi,   LenLo:   Byte;  
          end;  
      var  
          Seg:   TSegHeader;  
      begin  
          with   Seg,   FS   do  
              repeat  
                  Read(Seg,   SizeOf(Seg));  
                  if   Flag   <>   JPEG_FRAME   then  
                      Position   :=   Position   +   MakeWord(LenLo,   LenHi)   -   2;  
              until   (Position   >=   Fs.Size)   or   (Seg.Flag   =   JPEG_FRAME);  
      end;  
   
  begin  
      FS   :=   TFileStream.Create(FileName,   fmOpenRead);  
      try  
          {   JPEG   文件开头必须为   FF   D8,文件尾必须为   FF   D9   }  
          FS.Read(Flag1,   SizeOf(Flag1));  
          FS.Position   :=   FS.Size   -   2;  
          FS.Read(Flag2,   SizeOf(Flag2));  
          Result   :=   (Flag1   =   JPEG_FLAG_BEGIN)   and   (Flag2   =   JPEG_FLAG_END);  
          if   not   Result   then   exit;   {   不是合法的JPEG文件则退出   }  
   
          FS.Position   :=   2;  
          SeekForFrame;   {   寻找JPEG的Frame段,即图像数据区   }  
          FS.Read(B,   SizeOf(B));   {   Frame段段头后第一个Byte为数据精度   }  
   
          FS.Read(B,   SizeOf(B));   {   高度高字节   }  
          WordRec(Height).Hi   :=   B;  
          FS.Read(B,   SizeOf(B));   {   高度低字节   }  
          WordRec(Height).Lo   :=   B;  
   
          FS.Read(B,   SizeOf(B));   {   宽度高字节   }  
          WordRec(Width).Hi   :=   B;  
          FS.Read(B,   SizeOf(B));   {   宽度低字节   }  
          WordRec(Width).Lo   :=   B;  
      finally  
          FS.Free;  
      end;  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      W,   H:   Word;  
  begin  
      with   OpenDialog1   do  
          if   Execute   then  
              if   GetJPEGSize(FileName,   W,   H)   then  
                  Caption   :=   Format('Yes,W:%d,H:%d',   [W,   H])  
              else   Caption   :=   'No';  
  end;  
       
   
   
   
 

-------------------------------------------------------
本回复由大傻的破玩意儿【CSDN's   forum   Explorer】完成!
大傻的破玩意儿,今天你用了木有   !!
软件功能强大,速度超快!!支持中...
软件下载地址:http://CoolSlob.ys168.com

DPI——每英寸的点数  
  单针对图片有意义吗

 
      何必那么麻烦     一句话搞定  
   
      ShowMessage(IntToStr(GetDeviceCaps(LoadInBmp.Canvas.Handle,LOGPIXELSY)))  
   
      LOGPIXELSY   跟   LOGPIXELSX   就是   宽高的象素

没有人知道吗?

UP.  
   
  我再附加一个问题:       如何将JPEG   图象   由4:3裁减为   2:3.

DPI只对打印有意义。  
 

抱歉!评论已关闭.