Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1260490
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-03-13 10:34:44



怎样取得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】完成! 大傻的破玩意儿,今天你用了木有   !! 软件功能强大,速度超快!!支持中... 软件下载地址:

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

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

没有人知道吗?

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

DPI只对打印有意义。  
 



--------------------------
新闻:中国移动将简化资费套餐至10套以内
导航:博客园首页  知识库  新闻  招聘  社区  小组  博问  网摘  找找看
阅读(766) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~