0

I'm trying to make this simple GraphicsMagick example as a node binding/addon. This code works as expected in OSX 10.6.7 with GraphicsMagick 1.3.15

#include <Magick++.h>
#include <iostream>
using namespace std;

int main(int argc,char **argv)
{
  Magick::InitializeMagick(0);
  Magick::Image image;

  try {
    image.read( "snow.jpg" );
    image.scale("320");
    image.write( "snow-scaled.jpg" );
  }
  catch( Magick::Exception &error_ ) {
      cout << "Caught exception: " << error_.what() << endl;
      return 1;
    }
  cout << "Image scaled!" << endl;
  return 0;
}

Compiling:
g++ scale.cpp `GraphicsMagick++-config --cppflags --cxxflags --ldflags --libs`

Running:
./a.out
Image scaled!

But making this code a node binding (0.6.14) just freezes (see full gist):

void AsyncWork(uv_work_t* req) {
    std::cout << "AsyncWork..." << std::endl;
    Baton* baton = static_cast<Baton*>(req->data);
    baton->result = 12345;  // Just a test

    Magick::Image image;   // <--- Freezes here!
    image.read("snow.jpg");
    std::cout << "Scaling..." << std::endl;
    image.scale("200");
    std::cout << "Done!" << std::endl;
    image.write("snow-scaled.jpg");
    // and baton->error to true.
}

Output when calling it from javascript:

AsyncWork...

Any ideas what's wrong? On a side note, this actually works when compiled/run under Ubuntu!

4

1 回答 1

1

您是否尝试过使用Magick::InitializeMagick(0);in进行初始化AsyncWork?异步函数在池线程上运行。

你总是可以在这里git 完成 GM 插件。

于 2012-06-25T12:14:30.173 回答