Gearman Study
view imgcolor/imgcolorWorker.cpp @ 5:f306280ee764
fix error message
| author | shokai <hashimoto@shokai.org> |
|---|---|
| date | Thu Dec 24 21:00:28 2009 +0900 (2 months ago) |
| parents | 610f626f2c37 |
| children |
line source
1 // 画像のだいたいの色とサイズを返すgearman worker
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <string>
6 #include <iostream>
7 #include <cv.h>
8 #include <highgui.h>
9 #include <boost/regex.hpp>
10 #include <boost/format.hpp>
11 #include <libgearman/gearman.h>
13 using namespace boost;
14 using namespace std;
15 IplImage *img, *img1px, *imgR, *imgG, *imgB;
17 void *job_imgcolor(gearman_job_st *job, void *cb_arg, size_t *result_size, gearman_return_t *ret_ptr);
19 int main(int argc, char* argv[]) {
20 img1px = cvCreateImage(cvSize(1,1), IPL_DEPTH_8U, 3);
21 imgR = cvCreateImage(cvSize(1,1), IPL_DEPTH_8U, 1);
22 imgG = cvCreateImage(cvSize(1,1), IPL_DEPTH_8U, 1);
23 imgB = cvCreateImage(cvSize(1,1), IPL_DEPTH_8U, 1);
25 gearman_worker_st worker;
26 gearman_worker_create(&worker);
27 gearman_worker_add_server(&worker, "127.0.0.1", 7003);
28 gearman_worker_add_function(&worker, "img_color", 0, job_imgcolor, NULL);
30 while(true) gearman_worker_work(&worker);
31 return 0;
32 }
34 void *job_imgcolor(gearman_job_st *job, void *cb_arg, size_t *result_size, gearman_return_t *ret_ptr){
35 string fileName = (char*)gearman_job_workload(job);
36 string result_str = "";
37 IplImage *img = cvLoadImage(fileName.c_str());
38 if(!img){
39 result_str += "{error: image load error}";
40 }
41 else{
42 cvResize(img, img1px, CV_INTER_CUBIC);
43 cvSplit(img1px, imgB, imgG, imgR, NULL);
44 result_str += str(format("{width: %d, height: %d, r: %d, g: %d, b:%d}")
45 % img->width % img->height %
46 (uint)(uchar)imgR->imageDataOrigin[0] %
47 (uint)(uchar)imgG->imageDataOrigin[0] %
48 (uint)(uchar)imgB->imageDataOrigin[0]);
49 cvReleaseImage(&img);
50 }
51 cout << fileName << " => " << result_str << endl;
53 char *result = (char*)strdup(result_str.c_str());
54 *result_size = result_str.size();
55 *ret_ptr = GEARMAN_SUCCESS;
56 return result;
57 }
