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

📄 stl.h

📁 openmeetings专用版
💻 H
📖 第 1 页 / 共 5 页
字号:
                      ) {    // Obtain first entry in MagickInfo list    unsigned long number_formats;    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    char **coder_list =      MagickLib::GetMagickList( "*", &number_formats, &exceptionInfo );    if( !coder_list )      {        throwException( exceptionInfo );        throwExceptionExplicit(MagickLib::MissingDelegateError,                             "Coder array not returned!", 0 );      }    // Clear out container    container_->clear();    for ( int i=0; i < number_formats; i++)      {        const MagickLib::MagickInfo *magick_info =          MagickLib::GetMagickInfo( coder_list[i], &exceptionInfo );        coder_list[i]=(char *)          MagickLib::RelinquishMagickMemory( coder_list[i] );        // Skip stealth coders        if ( magick_info->stealth )          continue;        try {          CoderInfo coderInfo( magick_info->name );          // Test isReadable_          if ( isReadable_ != CoderInfo::AnyMatch &&               (( coderInfo.isReadable() && isReadable_ != CoderInfo::TrueMatch ) ||                ( !coderInfo.isReadable() && isReadable_ != CoderInfo::FalseMatch )) )            continue;          // Test isWritable_          if ( isWritable_ != CoderInfo::AnyMatch &&               (( coderInfo.isWritable() && isWritable_ != CoderInfo::TrueMatch ) ||                ( !coderInfo.isWritable() && isWritable_ != CoderInfo::FalseMatch )) )            continue;          // Test isMultiFrame_          if ( isMultiFrame_ != CoderInfo::AnyMatch &&               (( coderInfo.isMultiFrame() && isMultiFrame_ != CoderInfo::TrueMatch ) ||                ( !coderInfo.isMultiFrame() && isMultiFrame_ != CoderInfo::FalseMatch )) )            continue;          // Append matches to container          container_->push_back( coderInfo );        }        // Intentionally ignore missing module errors        catch ( Magick::ErrorModule )          {            continue;          }      }    coder_list=(char **) MagickLib::RelinquishMagickMemory( coder_list );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  //  // Fill container with color histogram.  // Entries are of type "std::pair<Color,unsigned long>".  Use the pair  // "first" member to access the Color and the "second" member to access  // the number of times the color occurs in the image.  //  // For example:  //  //  Using <map>:  //  //  Image image("image.miff");  //  map<Color,unsigned long> histogram;  //  colorHistogram( &histogram, image );  //  std::map<Color,unsigned long>::const_iterator p=histogram.begin();  //  while (p != histogram.end())  //    {  //      cout << setw(10) << (int)p->second << ": ("  //           << setw(quantum_width) << (int)p->first.redQuantum() << ","  //           << setw(quantum_width) << (int)p->first.greenQuantum() << ","  //           << setw(quantum_width) << (int)p->first.blueQuantum() << ")"  //           << endl;  //      p++;  //    }  //  //  Using <vector>:  //  //  Image image("image.miff");  //  std::vector<std::pair<Color,unsigned long> > histogram;  //  colorHistogram( &histogram, image );  //  std::vector<std::pair<Color,unsigned long> >::const_iterator p=histogram.begin();  //  while (p != histogram.end())  //    {  //      cout << setw(10) << (int)p->second << ": ("  //           << setw(quantum_width) << (int)p->first.redQuantum() << ","  //           << setw(quantum_width) << (int)p->first.greenQuantum() << ","  //           << setw(quantum_width) << (int)p->first.blueQuantum() << ")"  //           << endl;  //      p++;  //    }  template <class Container >  void colorHistogram( Container *histogram_, const Image image)  {    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    // Obtain histogram array    unsigned long colors;    MagickLib::ColorPacket *histogram_array =       MagickLib::GetImageHistogram( image.constImage(), &colors, &exceptionInfo );    throwException( exceptionInfo );    // Clear out container    histogram_->clear();    // Transfer histogram array to container    for ( unsigned long i=0; i < colors; i++)      {        histogram_->insert(histogram_->end(),std::pair<const Color,unsigned long>                           ( Color(histogram_array[i].pixel.red,                                   histogram_array[i].pixel.green,                                   histogram_array[i].pixel.blue),                                   histogram_array[i].count) );      }        // Deallocate histogram array    histogram_array=(MagickLib::ColorPacket *)      MagickLib::RelinquishMagickMemory(histogram_array);    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }                        // Break down an image sequence into constituent parts.  This is  // useful for creating GIF or MNG animation sequences.  template <class InputIterator, class Container >  void deconstructImages( Container *deconstructedImages_,                          InputIterator first_,                          InputIterator last_ ) {    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    // Build image list    linkImages( first_, last_ );    MagickLib::Image* images = MagickLib::DeconstructImages( first_->image(),                                                             &exceptionInfo);    // Unlink image list    unlinkImages( first_, last_ );    // Ensure container is empty    deconstructedImages_->clear();    // Move images to container    insertImages( deconstructedImages_, images );    // Report any error    throwException( exceptionInfo );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  //  // Display an image sequence  //  template <class InputIterator>  void displayImages( InputIterator first_,		      InputIterator last_ ) {    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    linkImages( first_, last_ );    MagickLib::DisplayImages( first_->imageInfo(), first_->image() );    MagickLib::GetImageException( first_->image(), &exceptionInfo );    unlinkImages( first_, last_ );    throwException( exceptionInfo );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  // Merge a sequence of image frames which represent image layers.  // This is useful for combining Photoshop layers into a single image.  template <class InputIterator>  void flattenImages( Image *flattendImage_,		      InputIterator first_,		      InputIterator last_ ) {    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    linkImages( first_, last_ );    MagickLib::Image* image = MagickLib::FlattenImages( first_->image(),							&exceptionInfo );    unlinkImages( first_, last_ );    flattendImage_->replaceImage( image );    throwException( exceptionInfo );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  // Replace the colors of a sequence of images with the closest color  // from a reference image.  // Set dither_ to true to enable dithering.  Set measureError_ to  // true in order to evaluate quantization error.  template <class InputIterator>  void mapImages( InputIterator first_,		  InputIterator last_,		  const Image& mapImage_,		  bool dither_ = false,		  bool measureError_ = false ) {    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    linkImages( first_, last_ );    MagickLib::MapImages( first_->image(),			  mapImage_.constImage(),			  dither_ ? MagickLib::MagickTrue : MagickLib::MagickFalse);    MagickLib::GetImageException( first_->image(), &exceptionInfo );    if ( exceptionInfo.severity != MagickLib::UndefinedException )      {	unlinkImages( first_, last_ );	throwException( exceptionInfo );      }    MagickLib::Image* image = first_->image();    while( image )      {	// Calculate quantization error	if ( measureError_ )	  {	    MagickLib::GetImageQuantizeError( image );	    if ( image->exception.severity > MagickLib::UndefinedException )	      {		unlinkImages( first_, last_ );		throwException( exceptionInfo );	      }	  }		// Udate DirectClass representation of pixels	MagickLib::SyncImage( image );	if ( image->exception.severity > MagickLib::UndefinedException )	  {	    unlinkImages( first_, last_ );	    throwException( exceptionInfo );	  }	// Next image	image=image->next;      }    unlinkImages( first_, last_ );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  // Create a composite image by combining several separate images.  template <class Container, class InputIterator>  void montageImages( Container *montageImages_,		      InputIterator first_,		      InputIterator last_,		      const Montage &montageOpts_ ) {    MagickLib::MontageInfo* montageInfo =      static_cast<MagickLib::MontageInfo*>(MagickLib::AcquireMagickMemory(sizeof(MagickLib::MontageInfo)));    // Update montage options with those set in montageOpts_    montageOpts_.updateMontageInfo( *montageInfo );    // Update options which must transfer to image options    if ( montageOpts_.label().length() != 0 )      first_->label( montageOpts_.label() );    // Create linked image list    linkImages( first_, last_ );    // Reset output container to pristine state    montageImages_->clear();    // Do montage    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    MagickLib::Image *images = MagickLib::MontageImages( first_->image(),							 montageInfo,							 &exceptionInfo );    if ( images != 0 )      {	insertImages( montageImages_, images );      }    // Clean up any allocated data in montageInfo    MagickLib::DestroyMontageInfo( montageInfo );    // Unlink linked image list    unlinkImages( first_, last_ );    // Report any montage error    throwException( exceptionInfo );    // Apply transparency to montage images    if ( montageImages_->size() > 0 && montageOpts_.transparentColor().isValid() )      {	for_each( first_, last_, transparentImage( montageOpts_.transparentColor() ) );      }    // Report any transparentImage() error    MagickLib::GetImageException( first_->image(), &exceptionInfo );    throwException( exceptionInfo );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  // Morph a set of images  template <class InputIterator, class Container >  void morphImages( Container *morphedImages_,		    InputIterator first_,		    InputIterator last_,		    unsigned int frames_ ) {    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    // Build image list    linkImages( first_, last_ );    MagickLib::Image* images = MagickLib::MorphImages( first_->image(), frames_,						       &exceptionInfo);    // Unlink image list    unlinkImages( first_, last_ );    // Ensure container is empty    morphedImages_->clear();    // Move images to container    insertImages( morphedImages_, images );    // Report any error    throwException( exceptionInfo );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  // Inlay a number of images to form a single coherent picture.  template <class InputIterator>  void mosaicImages( Image *mosaicImage_,		     InputIterator first_,		     InputIterator last_ ) {    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    linkImages( first_, last_ );    MagickLib::Image* image = MagickLib::MosaicImages( first_->image(),						       &exceptionInfo );     unlinkImages( first_, last_ );    mosaicImage_->replaceImage( image );    throwException( exceptionInfo );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  // Quantize colors in images using current quantization settings  // Set measureError_ to true in order to measure quantization error  template <class InputIterator>  void quantizeImages( InputIterator first_,		       InputIterator last_,		       bool measureError_ = false ) {    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    linkImages( first_, last_ );    MagickLib::QuantizeImages( first_->quantizeInfo(),			       first_->image() );    MagickLib::GetImageException( first_->image(), &exceptionInfo );    if ( exceptionInfo.severity > MagickLib::UndefinedException )      {	unlinkImages( first_, last_ );	throwException( exceptionInfo );      }    MagickLib::Image* image = first_->image();    while( image != 0 )      {	// Calculate quantization error	if ( measureError_ )	  MagickLib::GetImageQuantizeError( image );	// Update DirectClass representation of pixels	MagickLib::SyncImage( image );	// Next image	image=image->next;      }    unlinkImages( first_, last_ );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  // Read images into existing container (appending to container)  // FIXME: need a way to specify options like size, depth, and density.  template <class Container>  void readImages( Container *sequence_,		   const std::string &imageSpec_ ) {    MagickLib::ImageInfo *imageInfo = MagickLib::CloneImageInfo(0);    imageSpec_.copy( imageInfo->filename, MaxTextExtent-1 );    imageInfo->filename[ imageSpec_.length() ] = 0;    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    MagickLib::Image* images =  MagickLib::ReadImage( imageInfo, &exceptionInfo );    MagickLib::DestroyImageInfo(imageInfo);    insertImages( sequence_, images);    throwException( exceptionInfo );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  template <class Container>  void readImages( Container *sequence_,		   const Blob &blob_ ) {    MagickLib::ImageInfo *imageInfo = MagickLib::CloneImageInfo(0);    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    MagickLib::Image *images = MagickLib::BlobToImage( imageInfo,						       blob_.data(),						       blob_.length(), &exceptionInfo );    MagickLib::DestroyImageInfo(imageInfo);    insertImages( sequence_, images );    throwException( exceptionInfo );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  // Write Images  template <class InputIterator>  void writeImages( InputIterator first_,		    InputIterator last_,		    const std::string &imageSpec_,		    bool adjoin_ = true ) {    first_->adjoin( adjoin_ );    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    linkImages( first_, last_ );    int errorStat = MagickLib::WriteImages( first_->constImageInfo(),                                            first_->image(),                                            imageSpec_.c_str(),                                            &exceptionInfo );    unlinkImages( first_, last_ );    if ( errorStat != false )      return;    throwException( exceptionInfo );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }  // Write images to BLOB  template <class InputIterator>  void writeImages( InputIterator first_,		    InputIterator last_,		    Blob *blob_,		    bool adjoin_ = true) {    first_->adjoin( adjoin_ );    linkImages( first_, last_ );    MagickLib::ExceptionInfo exceptionInfo;    MagickLib::GetExceptionInfo( &exceptionInfo );    size_t length = 2048; // Efficient size for small images    void* data = MagickLib::ImageToBlob( first_->imageInfo(),					 first_->image(),					 &length,					 &exceptionInfo);    blob_->updateNoCopy( data, length, Magick::Blob::MallocAllocator );    unlinkImages( first_, last_ );    throwException( exceptionInfo );    MagickLib::DestroyExceptionInfo( &exceptionInfo );  }} // namespace Magick#endif // Magick_STL_header

⌨️ 快捷键说明

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