void BWCopy(Widget w, Position at_x, Position at_y, int value) { BitmapWidget BW = (BitmapWidget) w; XImage *storage; char *storage_data; Dimension width, height; if (QuerySet(BW->bitmap.mark.from_x, BW->bitmap.mark.from_y)) { width = BW->bitmap.mark.to_x - BW->bitmap.mark.from_x + 1; height = BW->bitmap.mark.to_y - BW->bitmap.mark.from_y + 1; storage_data = CreateCleanData(Length(width, height)); storage = CreateBitmapImage(BW, storage_data, width, height); CopyImageData(BW->bitmap.image, storage, BW->bitmap.mark.from_x, BW->bitmap.mark.from_y, BW->bitmap.mark.to_x, BW->bitmap.mark.to_y, 0, 0); DrawImageData(BW, storage, at_x, at_y, value); DestroyBitmapImage(&storage); } }
void BWRestore(Widget w, Position at_x, Position at_y, int value) { BitmapWidget BW = (BitmapWidget) w; if (BW->bitmap.storage) { DrawImageData(BW, BW->bitmap.storage, at_x, at_y, value); /*DestroyBitmapImage(&BW->bitmap.storage);*/ } }
void Run() { std::vector<pangolin::GlTexture> gl_tex; // pangolin::Timer timer; bool capture_success = false; std::shared_ptr<pb::ImageArray> images = pb::ImageArray::Create(); camera_device.Capture(*images); while (!pangolin::ShouldQuit()) { capture_success = false; const bool go = is_stepping; if (!is_running) { is_stepping = false; } // usleep(20000); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); if (go) { capture_success = camera_device.Capture(*images); } if (capture_success) { gl_tex.resize(images->Size()); for (uint32_t cam_id = 0; cam_id < images->Size(); ++cam_id) { if (!gl_tex[cam_id].tid) { camera_img = images->at(cam_id); GLint internal_format = (camera_img->Format() == GL_LUMINANCE ? GL_LUMINANCE : GL_RGBA); // Only initialise now we know format. gl_tex[cam_id].Reinitialise( camera_img->Width(), camera_img->Height(), internal_format, false, 0, camera_img->Format(), camera_img->Type(), 0); } } camera_img = images->at(0); image_width = camera_img->Width(); image_height = camera_img->Height(); gui_vars.handler->image_height = image_height; gui_vars.handler->image_width = image_width; std::vector<cv::Mat> cvmat_images; for (int ii = 0; ii < images->Size(); ++ii) { cvmat_images.push_back(images->at(ii)->Mat()); } ProcessImage(cvmat_images); } if (camera_img && camera_img->data()) { for (uint32_t cam_id = 0; cam_id < rig.cameras_.size() && cam_id < images->Size(); ++cam_id) { camera_img = images->at(cam_id); gui_vars.camera_view[cam_id]->ActivateAndScissor(); gl_tex[cam_id].Upload(camera_img->data(), camera_img->Format(), camera_img->Type()); gl_tex[cam_id].RenderToViewportFlipY(); DrawImageData(cam_id); } gui_vars.grid_view->ActivateAndScissor(gui_vars.gl_render3d); if (draw_landmarks) { DrawLandmarks(min_lm_measurements_for_drawing, poses, rig, gui_vars.handler, selected_track_id); } } pangolin::FinishFrame(); } }