Ejemplo n.º 1
0
void Sprite::remapImages(FrameNumber frameFrom, FrameNumber frameTo, const std::vector<uint8_t>& mapping)
{
  ASSERT(m_format == IMAGE_INDEXED);
  ASSERT(mapping.size() == 256);

  CelList cels;
  getCels(cels);

  for (CelIterator it = cels.begin(); it != cels.end(); ++it) {
    Cel* cel = *it;

    // Remap this Cel because is inside the specified range
    if (cel->getFrame() >= frameFrom &&
        cel->getFrame() <= frameTo) {
      Image* image = getStock()->getImage(cel->getImage());
      LockImageBits<IndexedTraits> bits(image);
      LockImageBits<IndexedTraits>::iterator
        it = bits.begin(),
        end = bits.end();

      for (; it != end; ++it)
        *it = mapping[*it];
    }
  }
}
Ejemplo n.º 2
0
size_t Sprite::getImageRefs(int imageIndex) const
{
  CelList cels;
  getCels(cels);

  size_t refs = 0;
  for (CelList::iterator it=cels.begin(), end=cels.end(); it != end; ++it)
    if ((*it)->getImage() == imageIndex)
      ++refs;

  return refs;
}
Ejemplo n.º 3
0
void Sprite::remapImages(FrameNumber frameFrom, FrameNumber frameTo, const std::vector<uint8_t>& mapping)
{
  ASSERT(m_format == IMAGE_INDEXED);
  ASSERT(mapping.size() == 256);

  CelList cels;
  getCels(cels);

  for (CelIterator it = cels.begin(); it != cels.end(); ++it) {
    Cel* cel = *it;

    // Remap this Cel because is inside the specified range
    if (cel->getFrame() >= frameFrom &&
        cel->getFrame() <= frameTo) {
      Image* image = getStock()->getImage(cel->getImage());

      for (int y=0; y<image->h; ++y) {
        IndexedTraits::address_t ptr = image_address_fast<IndexedTraits>(image, 0, y);
        for (int x=0; x<image->w; ++x, ++ptr)
          *ptr = mapping[*ptr];
      }
    }
  }
}