Пример #1
0
static void area_main_update(area_context_t *context) {
  /* also setup the local error messages here, so they are */
  /* updated for all entries at once */
  gboolean sensitive;
  if(!context->bounds.valid()) {
    sensitive = FALSE;
  } else if(!context->bounds.normalized()) {
    gtk_label_set_text(GTK_LABEL(context->direct.error),
                       _("\"From\" must be smaller than \"to\" value!"));
    gtk_label_set_text(GTK_LABEL(context->extent.error),
                       _("Extents must be positive!"));
    sensitive = FALSE;
  } else {
    gtk_label_set_text(GTK_LABEL(context->direct.error), "");
    gtk_label_set_text(GTK_LABEL(context->extent.error), "");

    sensitive = TRUE;
  }
  gtk_dialog_set_response_sensitive(context->dialog, GTK_RESPONSE_ACCEPT, sensitive);

  /* check if area size exceeds recommended values */
  if(selected_area(context) > WARN_OVER)
    gtk_widget_show(context->warning);
  else
    gtk_widget_hide(context->warning);
}
Пример #2
0
static bool area_warning(area_context_t *context) {
  bool ret = true;

  /* check if area size exceeds recommended values */
  double area = selected_area(context);

  if(area > WARN_OVER) {
    g_string text(warn_text(area));
    const trstring msg = trstring("%1\n\nDo you really want to continue?").arg(text.get());
    text.reset();
    ret = osm2go_platform::yes_no(_("Area size warning!"), msg,
                 MISC_AGAIN_ID_AREA_TOO_BIG | MISC_AGAIN_FLAG_DONT_SAVE_NO, context->dialog.get());
  }

  return ret;
}
Пример #3
0
static void on_area_warning_clicked(area_context_t *context) {
  double area = selected_area(context);

  g_string msg(warn_text(area));
  warning_dlg(msg.get(), context->dialog.get());
}
Пример #4
0
int main(int argc, char *argv[]){
    
    // 1. read image file
    char *filename = (argc >= 2) ? argv[1] : (char*)"/Users/naoto/git/opencv_gl/opencv/fruits.jpg";
    original_image = cv::imread(filename);//多分ここら辺はすべてポインタ渡し。だからコピーする時は注意
    if(original_image.empty()){
        printf("ERROR: image not found!\n");
        return 0;
    }
    
    //print hot keys
    printf( "Hot keys: \n"
           "\tESC or q - quit the program\n"
           "\tr - reverse mode\n"
           "\tz - undo reverse");
    
    // 2. prepare window
    cv::namedWindow("image",1);
    
    // 3. prepare Mat objects for processing-mask and processed-image
    selected_image=original_image.clone();                           // Matオブジェクトのクローンを生成する
    // 3. prepare Mat objects for processing-mask and processed-image
    // Matオブジェクトのクローンを生成する
    reverse_image=original_image.clone();//
    // 4. show image to window for generating mask
    cv::imshow("image", selected_image);
    
    // 5. set callback function for mouse operations
    cv::setMouseCallback("image", on_mouse,0);// マウス操作のコールバック関数を登録 3つ目の引数は
    //http://opencv.jp/opencv-2.2/py/highgui_user_interface.html どれがどれかは教科書見て
    
    bool loop_flag = true;
    while(loop_flag){
        
        // 6. wait for key input
        int c = cv::waitKey(0);
        
        // 7. process according to input
        switch(c){
            case 27://ESC
            case 'q':
                loop_flag = false;
                break;
            case 'r':{//{}にしないと、二つの変数のスコープがswitch文内になってしまうため、初期化されない可能性が
                //http://blog.livedoor.jp/bribser_dev/archives/4181608.html
                //矩形の一部分を変数に代入してくる。ポインタ渡し的なやつなので、元のデータの内容も書きかわる(浅いコピー?)
                //http://book.mynavi.jp/support/pc/opencv2/c3/opencv_img.html
                //ネガポジの反転
                //cv::Mat(selected_data,selected_area) というのをマスクすれば良いのかな?
                cv::Rect selected_area(prev_pt,prev_end_pt);
                cv::Mat buf_input = selected_image(selected_area);
                cv::Mat buf_output = reverse_image(selected_area);
                cv::bitwise_not(buf_input, buf_output);
                cv::imshow("image", reverse_image);
                break;}
            case 'z'://ctrl+zだと思ってもらえれば 選択状態へ戻る
                cv::imshow("image", selected_image);
                reverse_image=original_image.clone();
                selected=true;
                break;
        }
    }
    return 0;
}