亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? grfmt_tiff.cpp

?? 幾種圖像格式之間的轉(zhuǎn)換
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*M///////////////////////////////////////////////////////////////////////////////////////
//
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
//  By downloading, copying, installing or using the software you agree to this license.
//  If you do not agree to this license, do not download, install,
//  copy or use the software.
//
//
//                        Intel License Agreement
//                For Open Source Computer Vision Library
//
// Copyright (C) 2000, Intel Corporation, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
//   * Redistribution's of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//
//   * Redistribution's in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//
//   * The name of Intel Corporation may not be used to endorse or promote products
//     derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/

#include "../include/grfmt_tiff.h"
#include <assert.h>
#include <string.h>

static const char fmtDescrTiff[] = "TIFF (*.tiff;*.tif)";
static const char fmtSignTiffII[] = "II\x2a\x00";
static const char fmtSignTiffMM[] = "MM\x00\x2a";
static const int  tiffMask[] = { 0xff, 0xff, 0xffffffff, 0xffff, 0xffffffff };

/************************ TIFF reader *****************************/

GrFmtTiffReader::GrFmtTiffReader()
{
    m_sign_len = 4;
    m_signature = fmtSignTiffII;
    m_description = fmtDescrTiff;
    m_offsets = 0;
    m_maxoffsets = 0;
    m_strips = -1;
    m_max_pal_length = 0;
    m_temp_palette = 0;
}


GrFmtTiffReader::~GrFmtTiffReader()
{
    Close();

    delete m_offsets;
    delete m_temp_palette;
}

void  GrFmtTiffReader::Close()
{
    m_strm.Close();
}


bool  GrFmtTiffReader::CheckFormat( const char* signature )
{
    return memcmp( signature, fmtSignTiffII, 4 ) == 0 ||
           memcmp( signature, fmtSignTiffMM, 4 ) == 0;
}


int   GrFmtTiffReader::GetWordEx()
{
    int val = m_strm.GetWord();
    if( m_byteorder == TIFF_ORDER_MM )
        val = ((val)>>8)|(((val)&0xff)<<8);
    return val;
}


int   GrFmtTiffReader::GetDWordEx()
{
    int val = m_strm.GetDWord();
    if( m_byteorder == TIFF_ORDER_MM )
        val = BSWAP( val );
    return val;
}


void  GrFmtTiffReader::ReadTable( int offset, int count,
                                  TiffFieldType fieldType,
                                  int*& array, int& arraysize )
{
    int i;
    
    if( count < 0 )
        BAD_HEADER_ERR();
    
    if( fieldType != TIFF_TYPE_SHORT &&
        fieldType != TIFF_TYPE_LONG &&
        fieldType != TIFF_TYPE_BYTE )
        BAD_HEADER_ERR();

    if( count > arraysize )
    {
        delete array;
        arraysize = arraysize*3/2;
        if( arraysize < count )
            arraysize = count;
        array = new int[arraysize];
    }

    if( count > 1 )
    {
        int pos = m_strm.GetPos();
        m_strm.SetPos( offset );

        if( fieldType == TIFF_TYPE_LONG )
        {
            if( m_byteorder == TIFF_ORDER_MM )
                for( i = 0; i < count; i++ )
                    array[i] = ((RMByteStream&)m_strm).GetDWord();
            else
                for( i = 0; i < count; i++ )
                    array[i] = ((RLByteStream&)m_strm).GetDWord();
        }
        else if( fieldType == TIFF_TYPE_SHORT )
        {
            if( m_byteorder == TIFF_ORDER_MM )
                for( i = 0; i < count; i++ )
                    array[i] = ((RMByteStream&)m_strm).GetWord();
            else
                for( i = 0; i < count; i++ )
                    array[i] = ((RLByteStream&)m_strm).GetWord();
        }
        else // fieldType == TIFF_TYPE_BYTE
            for( i = 0; i < count; i++ )
                array[i] = m_strm.GetByte();

        m_strm.SetPos(pos);
    }
    else
    {
        assert( (offset & ~tiffMask[fieldType]) == 0 );
        array[0] = offset;
    }
}


bool  GrFmtTiffReader::ReadHeader()
{
    bool result = false;
    int  photometric = -1;
    int  channels = 1;
    int  pal_length = -1;

    const int MAX_CHANNELS = 4;
    int  bpp_arr[MAX_CHANNELS];

    assert( strlen(m_filename) != 0 );
    if( !m_strm.Open( m_filename )) return false;

    m_width = -1;
    m_height = -1;
    m_strips = -1;
    m_bpp = 1;
    m_compression = TIFF_UNCOMP;
    m_rows_per_strip = -1;

    try
    {
        m_byteorder = (TiffByteOrder)m_strm.GetWord();
        m_strm.Skip( 2 );
        int header_offset = GetDWordEx();

        m_strm.SetPos( header_offset );

        // read the first tag directory
        int i, j, count = GetWordEx();

        for( i = 0; i < count; i++ )
        {
            // read tag
            TiffTag tag = (TiffTag)GetWordEx();
            TiffFieldType fieldType = (TiffFieldType)GetWordEx();
            int count = GetDWordEx();
            int value = GetDWordEx();
            if( count == 1 )
            {
                if( m_byteorder == TIFF_ORDER_MM )
                {
                    if( fieldType == TIFF_TYPE_SHORT )
                        value = (unsigned)value >> 16;
                    else if( fieldType == TIFF_TYPE_BYTE )
                        value = (unsigned)value >> 24;
                }

                value &= tiffMask[fieldType];
            }

            switch( tag )
            {
            case  TIFF_TAG_WIDTH:
                m_width = value;
                break;

            case  TIFF_TAG_HEIGHT:
                m_height = value;
                break;

            case  TIFF_TAG_BITS_PER_SAMPLE:
                {
                    int* bpp_arr_ref = bpp_arr;

                    if( count > MAX_CHANNELS )
                        BAD_HEADER_ERR();

                    ReadTable( value, count, fieldType, bpp_arr_ref, count );
                
                    for( j = 1; j < count; j++ )
                    {
                        if( bpp_arr[j] != bpp_arr[0] )
                        {
                            BAD_HEADER_ERR();
                        }
                    }

                    m_bpp = bpp_arr[0];
                }

                break;

            case  TIFF_TAG_COMPRESSION:
                m_compression = (TiffCompression)value;
                if( m_compression != TIFF_UNCOMP &&
                    m_compression != TIFF_HUFFMAN &&
                    m_compression != TIFF_PACKBITS )
                    BAD_HEADER_ERR();
                break;

            case  TIFF_TAG_PHOTOMETRIC:
                photometric = value;
                if( (unsigned)photometric > 3 )
                    BAD_HEADER_ERR();
                break;

            case  TIFF_TAG_STRIP_OFFSETS:
                m_strips = count;
                ReadTable( value, count, fieldType, m_offsets, m_maxoffsets );
                break;

            case  TIFF_TAG_SAMPLES_PER_PIXEL:
                channels = value;
                if( channels != 1 && channels != 3 && channels != 4 )
                    BAD_HEADER_ERR();
                break;

            case  TIFF_TAG_ROWS_PER_STRIP:
                m_rows_per_strip = value;
                break;

            case  TIFF_TAG_PLANAR_CONFIG:
                {
                int planar_config = value;
                if( planar_config != 1 )
                    BAD_HEADER_ERR();
                }
                break;

            case  TIFF_TAG_COLOR_MAP:
                if( fieldType != TIFF_TYPE_SHORT || count < 2 )
                    BAD_HEADER_ERR();
                ReadTable( value, count, fieldType,
                           m_temp_palette, m_max_pal_length );
                pal_length = count / 3;
                if( pal_length > 256 )
                    BAD_HEADER_ERR();
                for( i = 0; i < pal_length; i++ )
                {
                    m_palette[i].r = (uchar)(m_temp_palette[i*3] >> 3);
                    m_palette[i].g = (uchar)(m_temp_palette[i*3 + 1] >> 3);
                    m_palette[i].b = (uchar)(m_temp_palette[i*3 + 2] >> 3);
                }
                break;
            }
        }

        if( m_strips == 1 && m_rows_per_strip == -1 )
            m_rows_per_strip = m_height;

        if( m_width > 0 && m_height > 0 && m_strips > 0 &&
            (m_height + m_rows_per_strip - 1)/m_rows_per_strip == m_strips )
        {
            switch( m_bpp )
            {
            case 1:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品ⅴa在线观看| 3d成人动漫网站| 国产精品狼人久久影院观看方式| 国产一区二区三区香蕉| 久久久久久久久97黄色工厂| 成人免费va视频| 亚洲日本免费电影| 欧美日本一道本在线视频| 日韩精品一二三| 欧美成人精品1314www| 国产精品99久久久久久有的能看 | 欧美日韩精品欧美日韩精品一| 亚洲成人动漫在线免费观看| 日韩精品一区二区三区三区免费 | 欧美精品亚洲二区| 精东粉嫩av免费一区二区三区| 久久久久久久久久久久久久久99| 暴力调教一区二区三区| 亚洲高清视频在线| 国产欧美日本一区视频| 91国产成人在线| 久久国产尿小便嘘嘘尿| 国产精品国产自产拍在线| 欧美丝袜自拍制服另类| 国产传媒欧美日韩成人| 亚洲一区二区欧美激情| 久久品道一品道久久精品| 一本久久精品一区二区| 国产一区 二区| 亚洲午夜精品17c| 国产亚洲欧洲一区高清在线观看| 欧美亚洲动漫制服丝袜| 国产老妇另类xxxxx| 亚洲成人动漫在线观看| 欧美国产乱子伦| 日韩色视频在线观看| 色婷婷久久99综合精品jk白丝| 久久精品国产**网站演员| 中文字幕日韩av资源站| 日韩欧美成人午夜| 欧美日韩在线观看一区二区 | 亚洲午夜精品在线| 国产精品女人毛片| 久久奇米777| 欧美一区二区三区色| 91浏览器入口在线观看| 国产专区综合网| 日本中文字幕一区二区视频| 亚洲乱码中文字幕综合| 日本一区二区三区在线观看| 欧美成人精精品一区二区频| 欧美日韩成人在线| 91久久香蕉国产日韩欧美9色| 国产麻豆精品95视频| 久久精品国产久精国产爱| 五月激情综合色| 亚洲一区在线观看网站| 亚洲视频1区2区| 国产精品白丝在线| 中文字幕二三区不卡| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美日本免费一区二区三区| 色噜噜狠狠色综合欧洲selulu| 北条麻妃一区二区三区| 国产黄色精品视频| 国产自产高清不卡| 国产精品一区二区在线看| 久国产精品韩国三级视频| 奇米一区二区三区| 免费看欧美女人艹b| 奇米精品一区二区三区在线观看一| 亚洲一二三四在线观看| 亚洲精品国产一区二区精华液 | 亚洲精品综合在线| 中文字幕亚洲欧美在线不卡| 国产精品污www在线观看| 中文字幕的久久| 国产精品灌醉下药二区| 综合av第一页| 亚洲五码中文字幕| 性感美女久久精品| 日本中文字幕不卡| 紧缚奴在线一区二区三区| 激情亚洲综合在线| 国产精品亚洲专一区二区三区| 国产成人自拍网| 91在线免费播放| 欧美在线免费观看亚洲| 51午夜精品国产| 精品国产亚洲在线| 国产拍揄自揄精品视频麻豆| 国产精品成人一区二区艾草| 亚洲免费在线视频| 亚洲成a人在线观看| 久久不见久久见中文字幕免费| 黄色日韩三级电影| 97aⅴ精品视频一二三区| 在线观看一区日韩| 日韩精品一区二区三区视频| 久久久国产精品麻豆| 亚洲免费在线观看视频| 五月婷婷综合激情| 国产精品一区二区黑丝| 日本精品免费观看高清观看| 欧美精品粉嫩高潮一区二区| 久久这里只有精品首页| 亚洲欧美国产高清| 日本欧美一区二区三区乱码| 国产毛片精品国产一区二区三区| 91在线国产观看| 欧美一区中文字幕| 中文字幕中文乱码欧美一区二区| 亚洲一二三四在线观看| 国产精品影视在线| 欧美日韩一区二区三区免费看| 久久色成人在线| 亚洲一区二区精品视频| 国产ts人妖一区二区| 欧美日韩精品欧美日韩精品一 | 中文字幕人成不卡一区| 亚洲成av人综合在线观看| 国产一区二区三区免费看| 欧美午夜理伦三级在线观看| 国产日韩欧美制服另类| 日韩在线一区二区三区| 97aⅴ精品视频一二三区| 精品国产一区二区三区久久久蜜月 | 日韩亚洲欧美综合| 亚洲免费三区一区二区| 韩国一区二区三区| 欧美午夜在线一二页| 国产欧美日韩视频在线观看| 天堂蜜桃一区二区三区| 99精品偷自拍| 国产日韩av一区| 蜜臀av一级做a爰片久久| 91免费国产视频网站| 久久综合九色综合97婷婷女人| 亚洲成a人v欧美综合天堂下载 | 国产精品免费久久久久| 日本人妖一区二区| 欧美午夜一区二区三区| 亚洲色欲色欲www| 国产精品小仙女| 26uuu色噜噜精品一区二区| 日本欧美一区二区三区| 欧美剧在线免费观看网站| 亚洲永久精品国产| 97精品久久久午夜一区二区三区 | 亚洲欧美综合在线精品| 国产精华液一区二区三区| 日韩免费观看高清完整版| 日日摸夜夜添夜夜添国产精品| 欧美在线观看你懂的| 悠悠色在线精品| 91福利视频网站| 亚洲黄一区二区三区| 99精品久久免费看蜜臀剧情介绍| 日本一二三四高清不卡| 国产酒店精品激情| 久久夜色精品国产噜噜av| 精品一区二区在线视频| 精品美女在线播放| 国产麻豆视频精品| 国产日产欧美一区| 成人av影院在线| 亚洲伦理在线免费看| 色综合天天做天天爱| 亚洲六月丁香色婷婷综合久久| 色哟哟一区二区| 亚洲6080在线| 欧美一区二区三区视频免费播放| 日韩av一二三| 久久午夜电影网| 成人午夜视频在线观看| 国产精品乱人伦中文| 色综合天天综合网天天狠天天| 亚洲欧美日韩国产一区二区三区 | 色欧美片视频在线观看 | 精品盗摄一区二区三区| 狠狠色丁香久久婷婷综| 国产亚洲女人久久久久毛片| 高清久久久久久| 亚洲精品视频免费看| 欧美日韩在线亚洲一区蜜芽| 蜜桃av一区二区| 久久久久国产免费免费| a级精品国产片在线观看| 亚洲精品视频一区二区| 欧美一级高清片在线观看| 国内国产精品久久| 亚洲欧美在线视频观看| 91蜜桃视频在线| 日韩av电影免费观看高清完整版在线观看 | 日日夜夜精品视频免费| 久久在线免费观看| 色综合av在线| 韩日欧美一区二区三区| 亚洲乱码中文字幕综合| 欧美白人最猛性xxxxx69交|