void Image::read_png(const char* filename) { std::vector<unsigned char> buffer, image; //load the image file with given filename LodePNG::loadFile(buffer, filename); //decode the png LodePNG::Decoder decoder; decoder.decode(image, buffer.empty() ? 0 : &buffer[0], (unsigned)buffer.size()); if (decoder.getChannels()<3 || decoder.getBpp()<24) { cerr << "Error: only color (RGBA), 8 bit per channel png images are supported." << endl; cerr << "Either convert your image or change the sourcecode." << endl; exit(1); } int w = decoder.getWidth(); int h = decoder.getHeight(); set_extent(w,h); // now convert the image data std::vector<unsigned char>::iterator imageIterator = image.begin(); Color *currentPixel = _pixel; while (imageIterator != image.end()) { currentPixel->r = (*imageIterator)/255.0; imageIterator++; currentPixel->g = (*imageIterator)/255.0; imageIterator++; currentPixel->b = (*imageIterator)/255.0; imageIterator++; // Let's just ignore the alpha channel imageIterator++; currentPixel++; } }
void RenderModel:: recompute_extent() { Signal::OperationDesc::Extent extent; if (chain_) extent = chain_->extent(target_marker_); set_extent (extent); }