欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實(shí)現(xiàn)讀取圖片長(zhǎng)度和寬度

 更新時(shí)間:2015年04月08日 09:26:45   投稿:junjie  
這篇文章主要介紹了C++實(shí)現(xiàn)讀取圖片長(zhǎng)度和寬度,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下

看到一個(gè)用ASP寫(xiě)的讀取圖片文件的長(zhǎng)度、寬度的程序,感覺(jué)有點(diǎn)意思,于是用C++也寫(xiě)了一個(gè)。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

class CImage
{
private:
  long  m_Width;
  long  m_Height;
  
  int get_extension(string fname);
public:
  CImage()
  {
    m_Width = 0;
    m_Height = 0;
    
  };
  void LoadImage(char* fname);
  
  long get_width()
  {
    return m_Width;
  };
  
  long get_height()
  {
    return m_Height;
  };  
  
};

int  CImage::get_extension(string fname)
{    
  char c = fname.at(fname.length()-1);
  char c2 = fname.at(fname.length()-3);
  
  if ((c == 'f') && (c2 == 'g')){  // file extension name is gif 
    return 1;
  }else if ((c == 'g') && (c2 == 'j')){ // file extension name is jpg
    return 2;
  }else if ((c == 'g') && (c2 == 'p')){ // file extension name is png
    return 3;
  }else if ((c == 'p') && (c2 == 'b')){ // file extension name is bmp
    return 4;
  }
  return 0;
}

void  CImage::LoadImage(char *fname)
{    
  m_Width = m_Height = 0;
    
  ifstream ffin(fname, std::ios::binary);
    
  if (!ffin){
    cout<<"Can not open this file."<<endl;
    return;
  }  
  int result = get_extension(fname);
  char s1[2] = {0}, s2[2] = {0};
  
  switch(result)
  {
  case 1:  // gif  
    ffin.seekg(6);     
    ffin.read(s1, 2);
    ffin.read(s2, 2);    
    m_Width = (unsigned int)(s1[1])<<8|(unsigned int)(s1[0]);
    m_Height = (unsigned int)(s2[1])<<8|(unsigned int)(s2[0]);  
    break;
  case 2:  // jpg
    ffin.seekg(164);    
    ffin.read(s1, 2);
    ffin.read(s2, 2);    
    m_Width = (unsigned int)(s1[1])<<8|(unsigned int)(s1[0]);
    m_Height = (unsigned int)(s2[1])<<8|(unsigned int)(s2[0]);  
    break;
  case 3:   // png
    ffin.seekg(17);    
    ffin.read(s1, 2);
    ffin.seekg(2, std::ios::cur);
    ffin.read(s2, 2);   
    m_Width = (unsigned int)(s1[1])<<8|(unsigned int)(s1[0]);
    m_Height = (unsigned int)(s2[1])<<8|(unsigned int)(s2[0]);  
    break;
  case 4:   // bmp    
    ffin.seekg(18);    
    ffin.read(s1, 2);
    ffin.seekg(2, std::ios::cur);
    ffin.read(s2, 2);    
    m_Width = (unsigned int)(s1[1])<<8|(unsigned int)(s1[0]);
    m_Height = (unsigned int)(s2[1])<<8|(unsigned int)(s2[0]);  
    break;
  default:
    cout<<"NO"<<endl;
    break;
  }  
  ffin.close();
};


int main(int argc, char *argv[])
{
  if (argc < 2){
    printf("usage: program imagefilename/n");
    return 0;
  } 
  CImage test;
  test.LoadImage(argv[1]);
  cout<<"width:"<<test.get_width()<<endl;
  cout<<"height:"<<test.get_height()<<endl;
   
  return 0;
}

相關(guān)文章

  • C語(yǔ)言二維數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲

    C語(yǔ)言二維數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言二維數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++11的future和promise、parkged_task使用

    C++11的future和promise、parkged_task使用

    這篇文章主要介紹了C++11的future和promise、parkged_task使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C++11中std::function基礎(chǔ)用法詳解

    C++11中std::function基礎(chǔ)用法詳解

    std::function是C++11標(biāo)準(zhǔn)庫(kù)中提供的一種可調(diào)用對(duì)象的通用類型,它可以存儲(chǔ)任意可調(diào)用對(duì)象,本文就來(lái)和大家講講它的基礎(chǔ)用法,希望對(duì)大家有所幫助
    2023-04-04
  • C語(yǔ)言嵌入informix基礎(chǔ)入門(mén)示例講解

    C語(yǔ)言嵌入informix基礎(chǔ)入門(mén)示例講解

    這篇文章主要介紹了C語(yǔ)言嵌入informix基礎(chǔ)方法,大家參考使用
    2013-11-11
  • 詳解C++?左值引用與?const?關(guān)鍵字

    詳解C++?左值引用與?const?關(guān)鍵字

    這篇文章主要介紹了C++?左值引用與?const?關(guān)鍵字,左值引用是已定義的變量的別名,其主要用途是用作函數(shù)的形參,將?const?關(guān)鍵字用于左值引用時(shí),其在初始化時(shí)可接受的賦值形式變得更加廣泛了,這里來(lái)總結(jié)一下,需要的朋友可以參考下
    2022-09-09
  • Qt中鼠標(biāo)點(diǎn)擊的幾種狀態(tài)

    Qt中鼠標(biāo)點(diǎn)擊的幾種狀態(tài)

    在Qt中,鼠標(biāo)點(diǎn)擊按鈕通常會(huì)觸發(fā)一系列的事件,包括pressed、released、clicked等,本文主要介紹了Qt中鼠標(biāo)點(diǎn)擊的幾種狀態(tài),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 解析C++中std::ref的使用

    解析C++中std::ref的使用

    這篇文章主要介紹了解析C++中std::ref的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • c病毒程序原理分析(防范病毒 c語(yǔ)言小病毒示例)

    c病毒程序原理分析(防范病毒 c語(yǔ)言小病毒示例)

    這篇文章主要介紹了病毒程序原理,寫(xiě)個(gè)小程序做演示,大家可以參考這個(gè)以防中相似C病毒
    2013-12-12
  • 一文帶你分清C++的定義,聲明和初始化

    一文帶你分清C++的定義,聲明和初始化

    這篇文章主要為大家詳細(xì)介紹了C++的定義,聲明,初始化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 淺析C/C++中的可變參數(shù)與默認(rèn)參數(shù)

    淺析C/C++中的可變參數(shù)與默認(rèn)參數(shù)

    C支持可變參數(shù)的函數(shù),這里的意思是C支持函數(shù)帶有可變數(shù)量的參數(shù),最常見(jiàn)的例子就是我們十分熟悉的printf()系列函數(shù)。我們還知道在函數(shù)調(diào)用時(shí)參數(shù)是自右向左壓棧的
    2013-09-09

最新評(píng)論