2012-05-13 1 views
0

이 간단한 GraphicsMagick 예제를 노드 바인딩/추가 기능으로 만들려고합니다. 호출 할 때노드 애드온 (OSX)의 GraphicsMagick 코드 고정

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. 
} 

출력 : 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! 

와 OSX 10.6.7 예상하지만,이 코드를 결합 노드 (0.6.14) 만 정지 (see full gist)를 만들기로이 코드는 작동 그것에서 자바 스크립트 :

AsyncWork... 

어떤 아이디어가 잘못 되었나요? 참고로, 이것은 실제로 우분투에서 컴파일/실행될 때 작동합니다!

답변

1

Magick::InitializeMagick(0);으로 초기화하려 했습니까? AsyncWork? 비동기 함수는 풀 스레드에서 실행됩니다.

당신은 항상 단지 완성되었던 GM 애드온 here를 git 할 수 있었다.