哪位高手能把下列delphi代码给转成vc,小女子先有礼了 
  获取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;

解决方案 »

  1.   

    直接找vc的代码得了,  IPicture 接口的,   CImage类,  
    以上功能应该很好实现了
      

  2.   

    只对熟女感兴趣^_^  /*  Copyright  Kingron  2002  */
      #define      JPEG_FLAG_BEGIN  0xD8FF  
      #define      JPEG_FLAG_END    0xD9FF  
      #define      JPEG_FRAME       0xC0FF  typedef  
              struct _tagSegHeader{ 
                  unsigned short Flag;  
                  unsigned char LenHi,  LenLo;  
              }TSegHeader;
     
          void SeekForFrame(HADNLE FS){  
     
              TSegHeader Seg;
              DWORD nByte;  
     
                  do{ 
                      nByte = 0;
                      ReadFile(FS,&Seg,  sizeof(Seg), &nByte, NULL);  
                      if  (Flag  !=  JPEG_FRAME )
                          SetFilePointer(FS, MAKEWORD(Seg.LenLo,  Seg.LenHi)  -  2, NULL, FILE_CURRENT);  
                  }while (!(SetFilePointer(FS, 0, NULL, FILE_CURRENT)>=  GetFileSize(Fs))  ||  (Seg.Flag  ==  JPEG_FRAME));  
          }  bool GetJPEGSize(char FileName[],unsigned short &Width, unsigned short &Height){  
      
          HANDLE FS;  
          unsigned short Flag1,  Flag2;  
          unsigned char B;
          DWORD nByte;  
          
          FS  =  CreateFile(FileName,
                                      GENERIC_READ,
                                      FILE_SHARE_READ ,
                                      NULL,
                                      OPEN_EXISTING,
                                      FILE_ATTRIBUTE_NORMAL,
                                      NULL
                                     );  
          if (FS == INVALID_HANDLE_VALUE) return false;
          __try{  
              /*  JPEG  文件开头必须为  FF  D8,文件尾必须为  FF  D9  */
              nByte = 0;  
              ReadFile(FS,&Flag1,  sizeof(Flag1), &nByte, NULL);  
              //FS.Position  :=  FS.Size  -  2;  
              SetFilePointer(FS, -2, NULL, FILE_END);
              //FS.Read(Flag2,  SizeOf(Flag2));  
              nByte = 0;  
              ReadFile(FS,&Flag2,  sizeof(Flag2), &nByte, NULL);
              Result  :=  ;  
              if (!((Flag1  ==  JPEG_FLAG_BEGIN)  &&  (Flag2  ==  JPEG_FLAG_END))) return false;  /*  不是合法的JPEG文件则退出  */  
        
              //FS.Position  :=  2;  
              SetFilePointer(FS, 2, NULL, FILE_BEGIN);
              SeekForFrame(FS);  /*  寻找JPEG的Frame段,即图像数据区  */  
              nByte = 0;
              ReadFile(FS, &B,  sizeof(B), &nByte, NULL);  /*  Frame段段头后第一个Byte为数据精度  */  
              nByte = 0; 
              ReadFile(FS, &B,  sizeof(B), &nByte, NULL);  /*  高度高字节  */  
              //WordRec(Height).Hi  :=  B;  
              Heigth = /*Heigth & 0xff +*/ (unsigned short)B << 8;
              nByte = 0;
              ReadFile(FS, &B,  sizeof(B), &nByte, NULL);  /*  高度低字节  */  
              Height = Heigth & 0xff00 + B;  
              nByte = 0;
              ReadFile(FS, &B,  sizeof(B), &nByte, NULL);  /*  宽度高字节  */  
              Width = /*Width & 0xff +*/ (unsigned short)B << 8;  
              nByte = 0;
              ReadFile(FS, &B,  sizeof(B), &nByte, NULL);  /*  宽度低字节  */  
              Width = Width & 0xff00 + B;  
          }__finally  {
              CloseHandle(FS);  
          }  
      }  留一段你自己翻译
        
      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;