⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 read_image.cpp

📁 《Visual C++小波变换技术与工程实践》靳济芳编著的光盘程序。
💻 CPP
字号:
/****************************************************************************/
/*   MPEG4 Visual Texture Coding (VTC) Mode Software                        */
/*                                                                          */
/*   This software was jointly developed by the following participants:     */
/*                                                                          */
/*   Single-quant,  multi-quant and flow control                            */
/*   are provided by  Sarnoff Corporation                                   */
/*     Iraj Sodagar   (iraj@sarnoff.com)                                    */
/*     Hung-Ju Lee    (hjlee@sarnoff.com)                                   */
/*     Paul Hatrack   (hatrack@sarnoff.com)                                 */
/*     Shipeng Li     (shipeng@sarnoff.com)                                 */
/*     Bing-Bing Chai (bchai@sarnoff.com)                                   */
/*     B.S. Srinivas  (bsrinivas@sarnoff.com)                               */
/*                                                                          */
/*   Bi-level is provided by Texas Instruments                              */
/*     Jie Liang      (liang@ti.com)                                        */
/*                                                                          */
/*   Shape Coding is provided by  OKI Electric Industry Co., Ltd.           */
/*     Zhixiong Wu    (sgo@hlabs.oki.co.jp)                                 */
/*     Yoshihiro Ueda (yueda@hlabs.oki.co.jp)                               */
/*     Toshifumi Kanamaru (kanamaru@hlabs.oki.co.jp)                        */
/*                                                                          */
/*   OKI, Sharp, Sarnoff, TI and Microsoft contributed to bitstream         */
/*   exchange and bug fixing.                                               */
/*                                                                          */
/*                                                                          */
/* In the course of development of the MPEG-4 standard, this software       */
/* module is an implementation of a part of one or more MPEG-4 tools as     */
/* specified by the MPEG-4 standard.                                        */
/*                                                                          */
/* The copyright of this software belongs to ISO/IEC. ISO/IEC gives use     */
/* of the MPEG-4 standard free license to use this  software module or      */
/* modifications thereof for hardware or software products claiming         */
/* conformance to the MPEG-4 standard.                                      */
/*                                                                          */
/* Those intending to use this software module in hardware or software      */
/* products are advised that use may infringe existing  patents. The        */
/* original developers of this software module and their companies, the     */
/* subsequent editors and their companies, and ISO/IEC have no liability    */
/* and ISO/IEC have no liability for use of this software module or         */
/* modification thereof in an implementation.                               */
/*                                                                          */
/* Permission is granted to MPEG members to use, copy, modify,              */
/* and distribute the software modules ( or portions thereof )              */
/* for standardization activity within ISO/IEC JTC1/SC29/WG11.              */
/*                                                                          */
/* Copyright 1995, 1996, 1997, 1998 ISO/IEC                                 */
/****************************************************************************/

#include "stdlib.h"
#include "stdio.h"
#include "math.h"
#include "basic.hpp"
#include "dataStruct.hpp"


Void CVTCEncoder::read_image(Char *img_path, 
							Int img_width, 
							Int img_height, 
							Int img_colors, 
							Int img_bit_depth,
							PICTURE *img)
{
  FILE *infptr = NULL;
  int  img_size;
   /* chroma  width and height  to handle odd image size */
  int img_cwidth  = (img_width+1)/2, 
      img_cheight = (img_height+1)/2; 
  int wordsize = (img_bit_depth>8)?2:1;
  unsigned char *srcimg; /* SL: to handle 1-16 bit */
  int  i,k,status;
  
  if (img_colors==1) { /*SL: image size for mono */
     img_size = img_width*img_height; /* bit_depth>8 occupies 2 bytes */
  }
  else { /* only for 420 color for now */
    img_size = img_width*img_height+2*img_cwidth*img_cheight; 
  }
  
  srcimg = new UChar[img_size*wordsize];
  if ((infptr = fopen(img_path,"rb")) == NULL) 
    exit(fprintf(stderr,"Unable to open image_file: %s\n",img_path));

  if ((status=fread(srcimg, sizeof(unsigned char)*wordsize, img_size, infptr))
       != img_size)
    exit(fprintf(stderr,"Error in reading image file: %s\n",img_path));

  fclose(infptr);
  
  /* put into VM structure */
  img[0].width  = img_width;
  img[0].height = img_height;
  if(img_colors != 1) { /* SL: only for color image */
    img[1].width  = img_cwidth; /* to handle odd image size */
    img[1].height = img_cheight;
    img[2].width  = img_cwidth;
    img[2].height = img_cheight;
  }

  img[0].data = (void *)new UChar[img_width*img_height*wordsize];
  if (img_colors==3) {
	img[1].data = (void *)new UChar[img_cwidth*img_cheight*wordsize];
    img[2].data = (void *)new UChar[img_cwidth*img_cheight*wordsize];
  }

  k=0;
  for (i=0; i<img_width*img_height*wordsize; i++) { 
    if (img_bit_depth > 8){ /* mask the input */
      if (i%2==0)
        ((UChar *)img[0].data)[i] =
	      (UChar) (srcimg[k++]&((1<<(img_bit_depth-8))-1));
      else
        ((unsigned char *)img[0].data)[i] = srcimg[k++];
    }
    else {
      ((unsigned char *)img[0].data)[i] = 
	(unsigned char) (srcimg[k++]&((1<<img_bit_depth)-1));
    }
  }
  if (img_colors != 1) { /* SL: only for color image */
    for (i=0; i<img_cwidth*img_cheight*wordsize; i++) {
      if (img_bit_depth > 8) { /* mask the input */
        if (i%2==0) 
           ((unsigned char *)img[1].data)[i] = 
	     (unsigned char) (srcimg[k++]&((1<<(img_bit_depth-8))-1));
        else
           ((unsigned char *)img[1].data)[i] = srcimg[k++];
      }
      else {
        ((unsigned char *)img[1].data)[i] = 
	  (unsigned char) (srcimg[k++]&((1<<img_bit_depth)-1));
      }
    }
    for (i=0; i<img_cwidth*img_cheight*wordsize; i++){
      if (img_bit_depth > 8) { /* mask the input */
        if (i%2==0) 
           ((unsigned char *)img[2].data)[i] = 
	     (unsigned char) (srcimg[k++]&((1<<(img_bit_depth-8))-1));
        else
          ((unsigned char *)img[2].data)[i] = srcimg[k++];
      }
      else {
        ((unsigned char *)img[2].data)[i] = 
	  (unsigned char) (srcimg[k++]&((1<<img_bit_depth)-1));
      }
    }
  }
  if (srcimg) delete (srcimg);

}

// begin: added by Sharp (99/2/16)
Void CVTCEncoder::init_tile(Int tile_width, Int tile_height)
{ 
  PICTURE *img;
  Int img_cwidth, img_cheight;
  Int wordsize;
  Int img_size;
  Int img_colors = mzte_codec.m_iColors;
  Int img_bit_depth = mzte_codec.m_iBitDepth;
  Int col;
  
  img_cwidth = (tile_width+1)/2;
  img_cheight = (tile_height+1)/2;
  wordsize = (img_bit_depth > 8) ? 2 : 1;
  
  if (img_colors==MONO) { /*SL: image size for mono */
    img_size = tile_width*tile_height; /* bit_depth>8 occupies 2 bytes */
  }
  else { /* only for 420 color for now */
    img_size = tile_width*tile_height+2*img_cwidth*img_cheight;
  } 
    
/*  vm_param_org->Image = vm_param->Image;*/

	mzte_codec.m_ImageOrg = mzte_codec.m_Image;
    
  if ((img = (PICTURE *)malloc(sizeof(PICTURE)*img_colors))==NULL)
    errorHandler("error allocating memory \n");
  
  img[0].width = tile_width;
  img[0].height = tile_height;
  if(img_colors != MONO){
    img[1].width  = img_cwidth;
    img[1].height = img_cheight;
    img[2].width  = img_cwidth;
    img[2].height = img_cheight;
  } 

  if ((img[0].data=(Void *)
      malloc(sizeof(UChar)*tile_width*tile_height*wordsize)) == NULL)
    errorHandler("Couldn't allocate memory to image->Y->data\n");
  if (img_colors != MONO) { /* SL: only for color image */
    if ((img[1].data = (Void *)
        malloc(sizeof(UChar)*img_cwidth*img_cheight*wordsize))==NULL)
      errorHandler("Couldn't allocate memory to image->U->data\n");
    if ((img[2].data = (Void *)
        malloc(sizeof(UChar)*img_cwidth*img_cheight*wordsize))==NULL)
      errorHandler("Couldn't allocate memory to image->V->data\n");
  }

// FPDAM begin: modified by Sharp
#if 0
  for(col=0; col<img_colors; col++){
    img[col].mask = (UChar *)malloc(sizeof(UChar)*tile_width*tile_height);
    if (img[col].mask == NULL)
      errorHandler("error allocating memory \n");
    memset(img[col].mask, 1, sizeof(UChar)*tile_width*tile_height);
  }
#endif
  for(col=0; col<img_colors; col++){
    if(col==0) {
      img[col].mask = (UChar *)malloc(sizeof(UChar)*tile_width*tile_height);
      if (img[col].mask == NULL)
        errorHandler("error allocating memory \n");
      memset(img[col].mask, 1, sizeof(UChar)*tile_width*tile_height);
    } else {
      img[col].mask=NULL;
    }
  }
// FPDAM end: modified by Sharp

/*  vm_param->Image = img;*/
	mzte_codec.m_Image = img;
} 
// end: added by Sharp (99/2/16)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -