青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Cpper
C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿
libpng比較另類,解碼方式比較奇特,這里記錄下
以下代碼為使用虛擬IOReader的方式,稍做修改就基于FILE使用
代碼很詳細,不需額外解釋
PNGImage::PNGImage(const std::string& filename):
    ReferenceCountedImage(filename),
    data_(
0)
{
    IOReader
* reader = FileSystem::instance()->readFile(filename);
    
if(reader == 0)
        
return;

    png_structp png_ptr 
= png_create_read_struct(PNG_LIBPNG_VER_STRING, 000);
    
if(png_ptr == 0)
    {
        reader
->close();
        reader
->deleteLater();
    }

    png_infop info_ptr 
= png_create_info_struct(png_ptr);
    
if(info_ptr == 0)
    {
        png_destroy_read_struct(
&png_ptr, png_infopp(0), png_infopp(0));
        reader
->close();
        reader
->deleteLater();
    }

    
if(setjmp(png_jmpbuf(png_ptr)))
    {
        png_destroy_read_struct(
&png_ptr,png_infopp(0),png_infopp(0));
        reader
->close();
        reader
->deleteLater();
    }

    png_set_read_fn( png_ptr,reader,(png_rw_ptr)user_read_data);

    png_set_sig_bytes(png_ptr,
0);

    png_read_png(png_ptr,info_ptr,PNG_TRANSFORM_IDENTITY,
0);
    
const unsigned int width = png_get_image_width(png_ptr,info_ptr);
    
const unsigned int height = png_get_image_height(png_ptr,info_ptr);
    
const unsigned int bit_depth = png_get_bit_depth(png_ptr,info_ptr);
    
if(bit_depth != 8)
    {
        reader
->close();
        reader
->deleteLater();
        png_destroy_info_struct(png_ptr,png_infopp(
&info_ptr));
        png_destroy_read_struct(
&png_ptr,png_infopp(0), png_infopp(0));
    }

    
const png_byte colorType = png_get_color_type(png_ptr, info_ptr);
    
if((colorType != PNG_COLOR_TYPE_RGB) && (colorType != PNG_COLOR_TYPE_RGB_ALPHA))
    {
        reader
->close();
        reader
->deleteLater();
        png_destroy_info_struct(png_ptr, png_infopp(
&info_ptr));
        png_destroy_read_struct(
&png_ptr, png_infopp(0), png_infopp(0));
    }

    
const int bytesPerPixel = (colorType == PNG_COLOR_TYPE_RGB) ? 3 : 4;
    
const int stride = bytesPerPixel * width;

    unsigned 
char* data = new unsigned char[stride * height];
    png_bytep
* row_pointers = png_get_rows(png_ptr, info_ptr);
    
for(unsigned int i = 0; i < height; ++i)
    {
        
const unsigned int row = height - i - 1;
        memcpy(data 
+ (row * stride), row_pointers[i], stride);
    }

    size_.x_ 
= width;
    size_.y_ 
= height;
    numberOfBitsPerPixel_ 
= bytesPerPixel * 8;
    data_ 
= data;

    reader
->close();
    reader
->deleteLater();
    png_destroy_info_struct(png_ptr, png_infopp(
&info_ptr));
    png_destroy_read_struct(
&png_ptr, png_infopp(0), png_infopp(0));
}
posted on 2015-12-29 11:12 ccsdu2009 閱讀(3865) 評論(0)  編輯 收藏 引用 所屬分類: Game引擎編程基礎
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品jvid在线观看蜜臀 | 亚洲在线观看视频网站| 亚洲第一精品电影| 久久久免费精品视频| 亚洲国产成人高清精品| 亚洲成人在线视频播放| 另类尿喷潮videofree| 亚洲精品国产品国语在线app | 美女黄网久久| 欧美激情一区二区三区在线视频 | 在线观看精品一区| 亚洲欧洲日韩综合二区| 国产精品久久久一区二区| 久久久久久久综合| 欧美高清在线一区二区| 亚洲一区在线播放| 久久婷婷成人综合色| 蜜桃av一区二区| 亚洲午夜一区| 久久久www| 国产精品99久久久久久宅男| 欧美一区二区三区日韩| 日韩亚洲欧美高清| 午夜久久电影网| 亚洲精品看片| 欧美在线观看一区二区| 一区二区成人精品| 久久成人免费日本黄色| 国产精品99久久久久久久vr| 欧美主播一区二区三区| 亚洲视频在线观看一区| 久久久激情视频| 亚洲欧美一区二区激情| 欧美激情一区二区三区全黄| 久久国产日韩欧美| 欧美日韩在线高清| 欧美国产日韩a欧美在线观看| 国产精品久久久久久一区二区三区 | 久久精品国产亚洲aⅴ| 欧美国产免费| 可以看av的网站久久看| 国产精品一二| 9色精品在线| 亚洲国产精品一区二区第一页| 亚洲影视在线| 亚洲欧美激情一区二区| 欧美精品少妇一区二区三区| 亚洲激情视频网| 亚洲精品欧美激情| 欧美中文字幕精品| 欧美在线3区| 国产精品成人一区二区网站软件 | 欧美高清视频免费观看| 麻豆精品精华液| 国产亚洲欧洲| 午夜精品影院| 久久福利电影| 国产日韩欧美三级| 亚洲欧美日韩视频一区| 亚洲欧美综合v| 国产精品美女主播在线观看纯欲| 中文精品视频| 午夜精品久久久久久久久久久| 欧美日韩第一区日日骚| 99国产精品99久久久久久| 一区二区三区视频免费在线观看| 欧美久久久久久久| 日韩视频免费在线观看| 这里只有精品视频| 国产精品九九| 性做久久久久久免费观看欧美 | 亚洲二区免费| 欧美成人资源| 亚洲免费观看高清完整版在线观看熊 | 欧美伊人久久久久久午夜久久久久| 国产精品成人va在线观看| 一区二区三区四区国产| 欧美一区二区三区久久精品茉莉花| 国产精品视频一二三| 欧美一级黄色录像| 欧美成人一品| 在线综合欧美| 国产乱人伦精品一区二区| 欧美主播一区二区三区| 欧美成人一品| 亚洲一区亚洲二区| 国产日韩欧美中文在线播放| 久久男人资源视频| 亚洲美女淫视频| 久久九九久久九九| 亚洲精品中文字幕有码专区| 欧美色欧美亚洲高清在线视频| 亚洲欧美中日韩| 亚洲高清激情| 欧美一区二区三区视频在线观看| 一区二区三区在线免费观看| 欧美日韩激情网| 欧美一级一区| 日韩视频精品在线观看| 久久精品五月| 国产精品99久久久久久久女警| 国产一区二区三区四区老人| 欧美精品国产一区| 欧美影院精品一区| 亚洲精品一区二区在线观看| 久久久青草青青国产亚洲免观| 一本色道久久综合亚洲精品不| 国产午夜亚洲精品不卡| 欧美日韩国产a| 欧美伊人久久久久久久久影院| 欧美aⅴ一区二区三区视频| 一区二区av在线| 欧美高清免费| 久久激情五月婷婷| 一本色道久久综合亚洲二区三区| 狠狠综合久久av一区二区老牛| 国产精品高清网站| 欧美激情中文字幕乱码免费| 久久riav二区三区| 亚洲午夜免费福利视频| 亚洲精品一区二区三区不| 牛夜精品久久久久久久99黑人 | 日韩视频在线观看免费| 一区精品在线| 国产一区视频在线观看免费| 欧美日韩中国免费专区在线看| 麻豆免费精品视频| 久久精品国产久精国产思思| 亚洲一区激情| 亚洲一区二区精品在线观看| 99re6热在线精品视频播放速度| 欧美高清hd18日本| 欧美成人中文字幕在线| 欧美成人综合一区| 欧美阿v一级看视频| 蜜桃久久av| 欧美96在线丨欧| 欧美高清视频免费观看| 久久综合九色| 麻豆freexxxx性91精品| 老司机午夜免费精品视频| 久久免费高清| 麻豆成人在线播放| 欧美黑人一区二区三区| 欧美激情第10页| 亚洲国产精品一区二区久| 亚洲国产成人av| 亚洲国产视频直播| 日韩亚洲欧美一区| 一区二区三区欧美成人| 亚洲女ⅴideoshd黑人| 欧美一区二区三区男人的天堂| 欧美一级电影久久| 久久这里只精品最新地址| 欧美激情精品久久久久| 欧美日韩伦理在线| 国产欧美日韩一区二区三区在线观看| 国产日韩一区二区| 亚洲国产一区二区三区高清| 日韩一级视频免费观看在线| 亚洲一区精品在线| 久久久爽爽爽美女图片| 亚洲高清不卡在线观看| 一区二区三区视频在线| 久久电影一区| 免费欧美在线视频| 欧美性大战久久久久久久| 国产日韩欧美a| 亚洲精品视频二区| 亚洲欧美区自拍先锋| 美女脱光内衣内裤视频久久影院 | 午夜精品久久久久久久久久久久久 | 欧美一区二区视频在线观看| 久久久美女艺术照精彩视频福利播放 | 亚洲影视在线| 毛片一区二区三区| 欧美午夜精品| 亚洲福利视频一区| 国模吧视频一区| 午夜一级久久| 欧美国产综合| 国产亚洲欧美在线| 一区二区三区偷拍| 开元免费观看欧美电视剧网站| 日韩特黄影片| 久久综合久久久| 国产精品久久久久久久久久久久久久 | 又紧又大又爽精品一区二区| 亚洲视频网站在线观看| 裸体丰满少妇做受久久99精品| 99视频在线精品国自产拍免费观看| 久久成人精品一区二区三区| 欧美三级日本三级少妇99| 在线观看中文字幕不卡| 国产伦精品一区二区三区免费| 亚洲欧洲精品一区二区三区| 久久久精品日韩欧美| 亚洲一区二区三区777| 欧美精品v国产精品v日韩精品| 一区二区三区我不卡|