Giter Site home page Giter Site logo

imagefmt's Introduction

imagefmt

Image loader and saver for simple needs with support for custom IO and allocators. Independent of the garbage collector.

Decoders:

  • PNG, 8-bit and 16-bit interlaced and paletted (+tRNS chunk)
  • BMP, 8-bit
  • TGA, 8-bit non-paletted
  • JPEG, baseline

Encoders:

  • PNG, 8-bit non-paletted non-interlaced
  • BMP, 8-bit RGB RGBA
  • TGA, 8-bit

Returned buffers are 8-bit by default, other options are 16-bit and 8/16-bit based on source data. The top-left corner is at (0, 0) by default.

import imagefmt;

IFImage a = read_image("aya.jpg", 3);     // convert to rgb
if (a.e) {
    printf("*** load error: %s\n", IF_ERROR[a.e].ptr);
    return;
}
scope(exit) a.free();

IFInfo info = read_info("vine.tga");
printf("size: %d x %d   components: %d\n", info.w, info.h, info.c);

imagefmt's People

Contributors

webfreak001 avatar

Stargazers

Jack Stouffer avatar Nazar Tosyukov avatar  avatar  avatar Minty Fresh avatar GAURAV avatar SenseLogic avatar Ryan Blonna avatar Hiroki Noda avatar  avatar Dennis avatar shove avatar Ilia Ki avatar

imagefmt's Issues

Inifinite loop on empty buffer

code:

ubyte[] buf;
IFImage a = read_image(buf);

I fixed it changing the initial if in init_reader to:

ubyte init_reader(Reader* rc, Read io, ubyte[] buf)
{
    if (buf.length < 16) {
        return buf.length ? ERROR.lackdata : ERROR.nodata;
    }
...

Support flipping images vertically.

One quirk of OpenGL and some other graphics APIs is that the (0, 0) is expected to be at the bottom left corner of the image, whereas most image formats place (0, 0) at the top left. This usually relates to how Y-axis coordinates are projected (with OpenGL placing Y:0 at the bottom of the screen).

A number of image libraries provide flags or functions to perform this flipping behaviour,
ie. stb_image provides:

stbi_set_flip_vertically_on_load(true);

Which indicates that subsequent images should be loaded with their Y-axes reversed.

Implementing this at application level can be tricky, since some image formats (BMP) are stored bottom-up, whereas others are stored top-down.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.