Exemplo n.º 1
0
bool
Invert::do_invert( const Raster &src, Raster &dest)
{
  try {
    if (&src != &dest) {
      dest.redimension( src.width(), src.height(), src.depth(), src.interp());
    }

    size_t        words = src.data_words();
    Raster_Word * s     = src.raster_word();
    Raster_Word * d     = src.raster_word();

    for (size_t i = 0; i < words; ++i) {
      d[ i] = ~s[ i];
    }
    return true;
  }
  catch (...) {
    return false;
  }
}
Exemplo n.º 2
0
bool
TIFF_Reader::imp_load_next( Raster &raster)
{
  try {
    uint32 width;
    uint32 height;
    uint16 bits_per_sample;
    uint16 samples_per_pixel;
    uint16 photometric;
    Colormetric cm;
    ColorInterp interp;

    TIFFGetField( m_tiff, TIFFTAG_IMAGEWIDTH     , &width            );
    TIFFGetField( m_tiff, TIFFTAG_IMAGELENGTH    , &height           );
    TIFFGetField( m_tiff, TIFFTAG_BITSPERSAMPLE  , &bits_per_sample  );
    TIFFGetField( m_tiff, TIFFTAG_SAMPLESPERPIXEL, &samples_per_pixel);
    TIFFGetField( m_tiff, TIFFTAG_PHOTOMETRIC    , &photometric      );


    cm = colormetric_null;
    switch (bits_per_sample) {
    case 1:
      cm = colormetric_1;
      switch (photometric) {
      case 0: interp = colorinterp_low_is_white; break;
      case 1: interp = colorinterp_low_is_black; break;
      }
      break;
    case 4:
      cm = colormetric_4;
      switch (photometric) {
      case 0: interp = colorinterp_low_is_white; break;
      case 1: interp = colorinterp_low_is_black; break;
      case 3: interp = colorinterp_paletted    ; break;
      }
      break;
    case 8:
      switch (photometric) {
      case 0:
        cm = colormetric_8;
        interp = colorinterp_low_is_white;
        break;
      case 1:
        cm = colormetric_8;
        interp = colorinterp_low_is_black;
        break;
      case 2:
        cm = colormetric_24;
        break;
      case 3:
        cm = colormetric_8;
        interp = colorinterp_paletted;
        break;
      }
      break;
    case 16:
      cm = colormetric_16;
      break;
    }

    if (colormetric_null == cm) {
      return false;
    }

    raster.redimension( width, height, cm, interp);
    uint32 offset    = 0;
    uint32 row       = 0;
    uint32 row_size  = raster.row_size();
    Raster_Data data = raster.raster();
    while ((row < height) &&
           (TIFFReadScanline( m_tiff, &data[ offset], row, 0) >= 0)) {
      offset += row_size;
      ++row;
    }

    return true;
  }
  catch (...) {
    return false;
  }
}