AGL
A graphics library
agl::Image Class Reference

Implements loading, modifying, and saving RGBA images. More...

#include <image.h>

Public Member Functions

 Image (int width, int height)
 
 Image (const Image &orig)
 
Imageoperator= (const Image &orig)
 
bool load (const std::string &filename)
 Load the given filename (.png) More...
 
bool save (const std::string &filename, bool flip=true) const
 Save the image to the given filename (.png) More...
 
int width () const
 Return the image width in pixels.
 
int height () const
 Return the image height in pixels.
 
unsigned char * data () const
 Return the RGBA data. More...
 
void set (int width, int height, unsigned char *data)
 Replace image RGBA data. More...
 
Pixel get (int row, int col) const
 Get the pixel at index (row, col) More...
 
void set (int row, int col, const Pixel &color)
 Set the pixel RGBA color at index (row, col) More...
 
void setVec4 (int row, int col, const glm::vec4 &color)
 Set the pixel RGBA color at index (row, col) More...
 
glm::vec4 getVec4 (int row, int col) const
 Get the pixel RGBA color at index (row, col) More...
 

Detailed Description

Implements loading, modifying, and saving RGBA images.

Member Function Documentation

◆ data()

unsigned char* agl::Image::data ( ) const
inline

Return the RGBA data.

Data will have size width * height * 4 (RGBA)

◆ get()

Pixel agl::Image::get ( int  row,
int  col 
) const

Get the pixel at index (row, col)

Parameters
rowThe row (value between 0 and height)
colThe col (value between 0 and width)

Pixel colors are unsigned char, e.g. in range 0 to 255

◆ getVec4()

vec4 agl::Image::getVec4 ( int  row,
int  col 
) const

Get the pixel RGBA color at index (row, col)

Parameters
rowThe row (value between 0 and height)
colThe col (value between 0 and width)

vec4 colors are in range [0,1]

◆ load()

bool agl::Image::load ( const std::string &  filename)

Load the given filename (.png)

Parameters
filenameThe file to load, relative to the running directory
// Copyright 2020, Savvy Sine, Aline Normoyle

#include "agl/window.h"

using glm::vec3;

class MyWindow : public agl::Window {
  void setup() {
    renderer.loadTexture("cloud", "../textures/cloud.png", 0);
    renderer.loadTexture("particle", "../textures/particle.png", 0);
    renderer.blendMode(agl::ADD);
  }

  void draw() {
    renderer.beginShader("sprite");
    renderer.texture("image", "cloud");
    renderer.sprite(vec3(-0.5f, 0.0f, 0.0f), red, 0.25f);
    renderer.sprite(vec3(0.5f, 0.0f, 0.0f), green, 0.25f);

    renderer.texture("image", "particle");
    renderer.sprite(vec3(0.0f, 0.25f, 0.0f), blue, 0.25f);
    renderer.endShader();
  }

  const glm::vec4 red = glm::vec4(1, 0, 0, 1);
  const glm::vec4 green = glm::vec4(0, 1, 0, 1);
  const glm::vec4 blue = glm::vec4(0, 0, 1, 1);
};

int main() {
  MyWindow window;
  window.run();
}

◆ save()

bool agl::Image::save ( const std::string &  filename,
bool  flip = true 
) const

Save the image to the given filename (.png)

Parameters
filenameThe file to load, relative to the running directory
flipWhether the file should flipped vertally before being saved

◆ set() [1/2]

void agl::Image::set ( int  row,
int  col,
const Pixel color 
)

Set the pixel RGBA color at index (row, col)

Parameters
rowThe row (value between 0 and height)
colThe col (value between 0 and width)

Pixel colors are unsigned char, e.g. in range 0 to 255

// Copyright 2020, Savvy Sine, Aline Normoyle

#include "agl/window.h"

using glm::vec2;
using glm::vec3;
using glm::vec4;

class MyWindow : public agl::Window {
  void setup() {
    renderer.setUniform("Fog.enabled", true);
    renderer.setUniform("Fog.color", vec3(0.9f));
    renderer.setUniform("Fog.minDist", 5.0f);
    renderer.setUniform("Fog.maxDist", 9.0f);
    renderer.setUniform("Material.specular", vec3(0.0));
    renderer.setUniform("MainTexture.enabled", true);
    renderer.setUniform("MainTexture.tile", vec2(10.0));

    int halfw = 32;
    int halfh = 32;
    agl::Image checker(halfw*2, halfh*2);
    for (int i = 0; i < checker.height(); i++) {
      for (int j = 0; j < checker.width(); j++) {
        if ((i < halfh && j < halfw) || (i > halfh && j > halfw)) {
          checker.setVec4(i, j, vec4(0, 0, 0, 1));
        } else {
          checker.setVec4(i, j, vec4(1, 1, 1, 1));
        }
      }
    }
    renderer.loadTexture("checker", checker, 0);
    renderer.texture("MainTexture.texture", "checker");

    setupPerspectiveScene(vec3(0.0), vec3(10.0));
    background(vec3(0.9f));
  }

  void draw() {
    renderer.scale(vec3(20.0f));
    renderer.plane();
  }
};

int main() {
  MyWindow window;
  window.run();
}

◆ set() [2/2]

void agl::Image::set ( int  width,
int  height,
unsigned char *  data 
)

Replace image RGBA data.

Parameters
widthThe new image width
heightThe new image height

This call will replace the old data with the new data. Data should match the size width * height * 4

◆ setVec4()

void agl::Image::setVec4 ( int  row,
int  col,
const glm::vec4 &  color 
)

Set the pixel RGBA color at index (row, col)

Parameters
rowThe row (value between 0 and height)
colThe col (value between 0 and width)

vec4 colors are in range [0,1]


The documentation for this class was generated from the following files: