// ======================================================================== // // Copyright 2009-2014 Intel Corporation // // // // Licensed under the Apache License, Version 2.0 (the "License"); // // you may not use this file except in compliance with the License. // // You may obtain a copy of the License at // // // // http://www.apache.org/licenses/LICENSE-2.0 // // // // Unless required by applicable law or agreed to in writing, software // // distributed under the License is distributed on an "AS IS" BASIS, // // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // // See the License for the specific language governing permissions and // // limitations under the License. // // ======================================================================== // #ifdef USE_IMAGEMAGICK #include "image/image.h" #include /*! include Image Magick headers */ #include using namespace Magick; namespace embree { Ref loadMagick(const FileName& fileName) { Magick::Image image(fileName.c_str()); Image* out = new Image4c(image.columns(),image.rows(),fileName); float rcpMaxRGB = 1.0f/float(MaxRGB); Magick::Pixels pixel_cache(image); Magick::PixelPacket* pixels = pixel_cache.get(0,0,out->width,out->height); for (size_t y=0; yheight; y++) { for (size_t x=0; xwidth; x++) { Color4 c; c.r = float(pixels[y*out->width+x].red )*rcpMaxRGB; c.g = float(pixels[y*out->width+x].green )*rcpMaxRGB; c.b = float(pixels[y*out->width+x].blue )*rcpMaxRGB; c.a = float(pixels[y*out->width+x].opacity)*rcpMaxRGB; out->set(x,y,c); } } return out; } void storeMagick(const Ref& img, const FileName& fileName) { Magick::Image image(Magick::Geometry(img->width,img->height), Magick::ColorRGB(0,0,0)); image.modifyImage(); Magick::Pixels pixel_cache(image); Magick::PixelPacket* pixels = pixel_cache.get(0,0,img->width,img->height); for (size_t y=0; yheight; y++) { for (size_t x=0; xwidth; x++) { Color4 c = img->get(x,y); pixels[y*img->width+x].red = Magick::Quantum(clamp(c.r)*MaxRGB); pixels[y*img->width+x].green = Magick::Quantum(clamp(c.g)*MaxRGB); pixels[y*img->width+x].blue = Magick::Quantum(clamp(c.b)*MaxRGB); pixels[y*img->width+x].opacity = Magick::Quantum(clamp(c.a)*MaxRGB); } } pixel_cache.sync(); image.write(fileName.c_str()); } } #endif // USE_IMAGEMAGICK