コード例 #1
0
ファイル: sprite.cpp プロジェクト: airways/aseprite
// static
Sprite* Sprite::createBasicSprite(doc::PixelFormat format, int width, int height, int ncolors)
{
  // Create the sprite.
  base::UniquePtr<doc::Sprite> sprite(new doc::Sprite(format, width, height, ncolors));
  sprite->setTotalFrames(doc::frame_t(1));

  // Create the main image.
  doc::ImageRef image(doc::Image::create(format, width, height));
  doc::clear_image(image.get(), 0);

  // Create the first transparent layer.
  {
    base::UniquePtr<doc::LayerImage> layer(new doc::LayerImage(sprite));
    layer->setName("Layer 1");

    // Create the cel.
    {
      base::UniquePtr<doc::Cel> cel(new doc::Cel(doc::frame_t(0), image));
      cel->setPosition(0, 0);

      // Add the cel in the layer.
      layer->addCel(cel);
      cel.release();            // Release the cel because it is in the layer
    }

    // Add the layer in the sprite.
    sprite->folder()->addLayer(layer.release()); // Release the layer because it's owned by the sprite
  }

  return sprite.release();
}
コード例 #2
0
ファイル: document.cpp プロジェクト: RobertLowe/aseprite
Document* Document::createBasicDocument(PixelFormat format, int width, int height, int ncolors)
{
  // Create the sprite.
  UniquePtr<Sprite> sprite(new Sprite(format, width, height, ncolors));
  sprite->setTotalFrames(FrameNumber(1));

  // Create the main image.
  int indexInStock;
  {
    UniquePtr<Image> image(Image::create(format, width, height));

    // Clear the image with mask color.
    image_clear(image, 0);

    // Add image in the sprite's stock.
    indexInStock = sprite->getStock()->addImage(image);
    image.release();            // Release the image because it is in the sprite's stock.
  }

  // Create the first transparent layer.
  {
    UniquePtr<LayerImage> layer(new LayerImage(sprite));
    layer->setName("Layer 1");

    // Create the cel.
    {
      UniquePtr<Cel> cel(new Cel(FrameNumber(0), indexInStock));
      cel->setPosition(0, 0);

      // Add the cel in the layer.
      layer->addCel(cel);
      cel.release();            // Release the cel because it is in the layer
    }

    // Add the layer in the sprite.
    sprite->getFolder()->addLayer(layer.release()); // Release the layer because it's owned by the sprite
  }

  // Create the document with the new sprite.
  UniquePtr<Document> document(new Document(sprite));
  sprite.release();             // Release the sprite because it is in the document.

  document->setFilename("Sprite");
  return document.release();    // Release the document (it does not throw) returning the raw pointer
}
コード例 #3
0
ファイル: main.cpp プロジェクト: Necrolis/freeablo
int main(int, char** argv)
{
    Render::RenderSettings settings;
    settings.windowWidth = 1280;
    settings.windowHeight = 960;
    Render::init(settings);

    Input::InputManager input(&keyPress, NULL, NULL, NULL, NULL, NULL);

    Render::SpriteGroup cel(argv[1]);
    max = cel.size();

    while(!done)
    {
        input.poll();
        input.processInput();

        Render::clear();
        Render::drawAt(cel[celIndex], 0, 0);
        Render::draw();
    }
}
コード例 #4
0
ファイル: main.cpp プロジェクト: keller-b/freeablo
int main(int argc, char** argv)
{
    if (argc < 2)
    {
        help(argv);
        return 0;
    }

    // Open MPQ

    HANDLE handle;
    SFileOpenArchive(argv[1], 0, STREAM_FLAG_READ_ONLY, &handle);
    FAIO::init(argv[1]);

    // For now only smaltext.cel

    Cel::CelDecoder cel("ctrlpan/smaltext.cel");

    // Prepare ascii vector according to order in cel file
    std::vector<int> ascii;

    for (int i = 'a'; i <= 'z'; i++)
        ascii.push_back(i);

    for (int i = '1'; i <= '9'; i++)
        ascii.push_back(i);

    ascii.push_back('0');

    // I can't find mapping in ascii table for one signs so
    // I marked it as 255
    std::vector<int> asciiSigns = {'-', '=', '+', '(', ')', '[', ']', '"', 255, '`', '\'', ':', ';', ',', '.', '/',
                                   '?', '!', '&', '%', '#', '$', '*', '<', '>', '@', '\\', '^', '_', '|', '~'};

    ascii.insert(ascii.end(), asciiSigns.begin(), asciiSigns.end());

    std::map<int, std::string> mapping;

    int positionX = 0;

    for (int32_t i = 0; i < cel.numFrames(); i++)
    {
        Cel::CelFrame& frame = cel[i];
        int32_t maximumVisibleX = 0;
        for (int32_t x = 0; x < frame.width(); x++)
        {
            for (int32_t y = 0; y < frame.height(); y++)
            {
                if (frame.get(x, y).visible)
                    if (x > maximumVisibleX)
                        maximumVisibleX = x;
            }
        }

        std::string asciiStr, positionXStr, maximumVisibleXStr;

        int asciiIdx = ascii[i];

        // Additional 2 pixels for every letter
        maximumVisibleX += 2;
        if (maximumVisibleX > frame.width())
            maximumVisibleX = frame.width();

        // Convert values to string
        char buffer[10];
        sprintf(buffer, "%d", asciiIdx);
        asciiStr = buffer;

        sprintf(buffer, "%d", maximumVisibleX);
        maximumVisibleXStr = buffer;

        sprintf(buffer, "%d", positionX);
        positionXStr = buffer;

        // Create output
        std::string out = "<char id=\"" + asciiStr + "\" x=\"" + positionXStr + "\" y=\"0\" width=\"" + maximumVisibleXStr +
                          "\" height=\"11\" xoffset=\"0\" yoffset=\"0\" xadvance=\"" + maximumVisibleXStr + "\" />";
        mapping[asciiIdx] = out;

        // Move further
        positionX += 13;
    }

    // Sort by ascii

    std::sort(ascii.begin(), ascii.end());
    for (int i : ascii)
    {
        std::cout << mapping[i] << std::endl;
    }

    FAIO::FAFileObject::quit();
}
コード例 #5
0
ファイル: main.c プロジェクト: warrormac/primer-trabajo-2016
int main()
{
    cel();
    return 0;
}
コード例 #6
0
ファイル: ase_format.cpp プロジェクト: optigon/aseprite
static Cel *ase_file_read_cel_chunk(FILE *f, Sprite *sprite, int frame,
                                    PixelFormat pixelFormat,
                                    FileOp *fop, ASE_Header *header, size_t chunk_end)
{
  /* read chunk data */
  int layer_index = fgetw(f);
  int x = ((short)fgetw(f));
  int y = ((short)fgetw(f));
  int opacity = fgetc(f);
  int cel_type = fgetw(f);
  Layer* layer;

  ase_file_read_padding(f, 7);

  layer = sprite->indexToLayer(layer_index);
  if (!layer) {
    fop_error(fop, "Frame %d didn't found layer with index %d\n",
              frame, layer_index);
    return NULL;
  }
  if (!layer->is_image()) {
    fop_error(fop, "Invalid .ase file (frame %d in layer %d which does not contain images\n",
              frame, layer_index);
    return NULL;
  }

  // Create the new frame.
  UniquePtr<Cel> cel(new Cel(frame, 0));
  cel->setPosition(x, y);
  cel->setOpacity(opacity);

  switch (cel_type) {

    case ASE_FILE_RAW_CEL: {
      // Read width and height
      int w = fgetw(f);
      int h = fgetw(f);

      if (w > 0 && h > 0) {
        Image* image = Image::create(pixelFormat, w, h);

        // Read pixel data
        switch (image->getPixelFormat()) {

          case IMAGE_RGB:
            read_raw_image<RgbTraits>(f, image, fop, header);
            break;

          case IMAGE_GRAYSCALE:
            read_raw_image<GrayscaleTraits>(f, image, fop, header);
            break;

          case IMAGE_INDEXED:
            read_raw_image<IndexedTraits>(f, image, fop, header);
            break;
        }

        cel->setImage(sprite->getStock()->addImage(image));
      }
      break;
    }

    case ASE_FILE_LINK_CEL: {
      // Read link position
      int link_frame = fgetw(f);
      Cel* link = static_cast<LayerImage*>(layer)->getCel(link_frame);

      if (link) {
        // Create a copy of the linked cel (avoid using links cel)
        Image* image = Image::createCopy(sprite->getStock()->getImage(link->getImage()));
        cel->setImage(sprite->getStock()->addImage(image));
      }
      else {
        // Linked cel doesn't found
        return NULL;
      }
      break;
    }

    case ASE_FILE_COMPRESSED_CEL: {
      // Read width and height
      int w = fgetw(f);
      int h = fgetw(f);

      if (w > 0 && h > 0) {
        Image* image = Image::create(pixelFormat, w, h);

        // Try to read pixel data
        try {
          switch (image->getPixelFormat()) {

            case IMAGE_RGB:
              read_compressed_image<RgbTraits>(f, image, chunk_end, fop, header);
              break;

            case IMAGE_GRAYSCALE:
              read_compressed_image<GrayscaleTraits>(f, image, chunk_end, fop, header);
              break;

            case IMAGE_INDEXED:
              read_compressed_image<IndexedTraits>(f, image, chunk_end, fop, header);
              break;
          }
        }
        // OK, in case of error we can show the problem, but continue
        // loading more cels.
        catch (const std::exception& e) {
          fop_error(fop, e.what());
        }

        cel->setImage(sprite->getStock()->addImage(image));
      }
      break;
    }

  }

  Cel* newCel = cel.release();
  static_cast<LayerImage*>(layer)->addCel(newCel);
  return newCel;
}