Example #1
0
  Ref<Image> loadMagick(const FileName& fileName)
  {
    Magick::Image image(fileName.c_str());
    Image* out = new Image4uc(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);

    switch (image.orientation()) 
    {
    case UndefinedOrientation:
    case TopLeftOrientation: {
      for (size_t y=0; y<out->height; y++) {
        for (size_t x=0; x<out->width; 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,out->height-y-1,c);
        }
      }
      break;
    }
    case BottomLeftOrientation: {
      for (size_t y=0; y<out->height; y++) {
        for (size_t x=0; x<out->width; 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);
        }
      }
      break;
    }
    default: {
      throw std::runtime_error("not supported image orientation");
    }
    }

    return out;
  }
Example #2
0
  void storeMagick(const Ref<Image>& 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; y<img->height; y++) {
      for (size_t x=0; x<img->width; x++) {
        Color4 c = img->get(x,y);
        pixels[y*img->width+x] = Magick::ColorRGB(Magick::Quantum(clamp(c.r)*MaxRGB),
						  Magick::Quantum(clamp(c.g)*MaxRGB),
						  Magick::Quantum(clamp(c.b)*MaxRGB));
      }
    }
    pixel_cache.sync();
    image.write(fileName.c_str());
  }
Example #3
0
  Ref<Image> 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; y<out->height; y++) {
      for (size_t x=0; x<out->width; 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;
  }