Beispiel #1
0
ossimRefPtr<ossimImageData> ossimImageSourceSequencer::getNextTile(
   ossim_uint32 resLevel)
{
   if(!theInputConnection)
   {
      return NULL;
   }
   ossimIpt origin;
   if(getTileOrigin(theCurrentTileNumber, origin))
   {
      ++theCurrentTileNumber;

      ossimIrect tileRect(origin.x,
			  origin.y,
			  origin.x + (theTileSize.x - 1),
			  origin.y + (theTileSize.y - 1));
      ossimRefPtr<ossimImageData> data = theInputConnection->getTile(tileRect,
                                                                     resLevel);
      if(!data.valid()||!data->getBuf())
	  {	 
	     theBlankTile->setImageRectangle(tileRect);
		 	
         return theBlankTile;
      }
      
      return data;
   }

   
   return ossimRefPtr<ossimImageData>();
}
bool ossimImageSourceSequencer::getTileRect(ossim_int64 tile_id, ossimIrect& tileRect) const
{
   // Fetch tile origin for this tile:
   ossimIpt origin;
   bool result = getTileOrigin(tile_id, origin);
   if ( result )
   {
      // Establish the tile rect of interest for this tile:
      tileRect.set_ul (origin);
      tileRect.set_lrx(origin.x + theTileSize.x - 1);
      tileRect.set_lry(origin.y + theTileSize.y - 1);
   }
   return result;
}
bool ossimGui::StaticTileImageCache::getTile(const ossimIpt& pt,
                                      QImage& image)const
{
   OpenThreads::ScopedLock<OpenThreads::Mutex> lock(m_mutex);
   bool result = false;
   ossimIpt tileOrigin = getTileOrigin(pt);
   ossimIrect cacheRect = getRect();

   if((image.width() != m_tileSize.x)||
      (image.height() != m_tileSize.y))
   {
      image = QImage(m_tileSize.x,
                     m_tileSize.y,
                     QImage::Format_RGB32);
   }
   if(cacheRect.pointWithin(tileOrigin))
   {
      ossimIpt delta(tileOrigin.x - cacheRect.ul().x,
                     tileOrigin.y - cacheRect.ul().y);

      if((delta.x >= 0)&&(delta.y >= 0))
      {
         image = m_cache->copy(tileOrigin.x - cacheRect.ul().x,
                               tileOrigin.y - cacheRect.ul().y,
                               m_tileSize.x,
                               m_tileSize.y);
	 ossim_int32 idx = getTileIndex(m_cacheRect, m_numberOfTiles, pt);
	 if(idx >=0)
	   {
	     result = m_validTileArray[idx];
	   }
      }
      else
      {
         image.fill(0);
      }
   }
   else
   {
      image.fill(0);
   }

   return result;
}
bool ossimQtStaticTileImageCache::getTile(const ossimIpt& pt,
                                      QImage& image)const
{
  bool result = false;
   ossimIpt tileOrigin = getTileOrigin(pt);
   ossimIrect cacheRect = getCacheRect();

   if((image.width() != theTileSize.x)||
      (image.height() != theTileSize.y))
   {
      image.create(theTileSize.x,
                   theTileSize.y,
                   32);
   }
   if(cacheRect.pointWithin(tileOrigin))
   {
      ossimIpt delta(tileOrigin.x - cacheRect.ul().x,
                     tileOrigin.y - cacheRect.ul().y);

      if((delta.x >= 0)&&(delta.y >= 0))
      {
         image = theCache.copy(tileOrigin.x - cacheRect.ul().x,
                               tileOrigin.y - cacheRect.ul().y,
                               theTileSize.x,
                               theTileSize.y);
	 ossim_int32 idx = getTileIndex(pt);
	 if(idx >=0)
	   {
	     result = theValidTileArray[idx];
	   }
      }
      else
      {
         image.fill(0);
      }
   }
   else
   {
      image.fill(0);
   }

   return result;
}
Beispiel #5
0
ossimRefPtr<ossimImageData> ossimImageSourceSequencer::getTile(
   ossim_int32 id, ossim_uint32 resLevel)
{
   static const char* MODULE= "ossimImageSourceSequencer::getTile(id, resLevel)";
   if(traceDebug())
   {
      CLOG << "entering.."<<endl;
   }
   if(!theInputConnection)
   {
      if(traceDebug())
      {
         CLOG << "No input connection so returing NULL" << endl;
      }
      return NULL;
   }
   // if we have no tiles try to initialize.
   if(getNumberOfTiles() == 0)
   {
      initialize();
   }
   ossimIpt origin;
   
   if(getTileOrigin(id, origin))
   {
      if(traceDebug())
      {
         CLOG << "returning tile" << endl;
      }
      ossimIrect tRect(origin.x,
                       origin.y,
                       origin.x + theTileSize.x - 1,
                       origin.y + theTileSize.y - 1);
      
      ossimRefPtr<ossimImageData> temp = theInputConnection->getTile(tRect,
                                                                     resLevel);


      theBlankTile->setImageRectangle(tRect);
      
      if(temp.valid())
      {
         if(!temp->getBuf())
         {
            return theBlankTile;
         }
      }
      else
      {
         return theBlankTile;
      }
      return temp;
   }
   else
   {
      if(traceDebug())
      {
         CLOG << "was not able to get an origin for id = " << id << endl;
      }
   }
   if(traceDebug())
   {
      CLOG << "leaving.."<<endl;
   }
   return 0;
}