Exemple #1
0
void scene_renderer_t::render_and_filter_shape( const shape_t& s, int bbox_index)
{
	RAMEN_ASSERT( bbox_index >= 0 && bbox_index <= filtered_bboxes_.size());
	
	boost::gil::fill_pixels( boost::gil::view( buf_), image::gray_pixel_t( 0));
	boost::gil::fill_pixels( boost::gil::view( tmp_), image::gray_pixel_t( 0));
	
    ren_base_type ren_base;
    agg::scanline_u8 sl;
    agg::rasterizer_scanline_aa<> ras;
    renderer_type ren;

    ren_base.set_view( boost::gil::view( buf_));
    ren.attach( ren_base);
    ras.gamma( agg::gamma_none());
	
	convert_to_path( s, path_, filtered_bboxes_[bbox_index].min, subsample_);
    agg::conv_curve<agg::path_storage> cpath( path_);
    ras.add_path( cpath);
    ras.filling_rule( agg::fill_non_zero);
    ren.color( color_type( 1.0f, 1.0f));
    agg::render_scanlines( ras, sl, ren);

	image::gray_image_view_t buf_view( boost::gil::view( buf_));
	
	float g = s.grow();
	if( g != 0.0f)
	{
		/*
		image::gray_image_view_t subbuf_view( boost::gil::subimage_view( buf_view, 
																		 bboxes_[bbox_index].min.x - filtered_bboxes_[bbox_index].min.x,
																		 bboxes_[bbox_index].min.y - filtered_bboxes_[bbox_index].min.y,
																		 bboxes_[bbox_index].size().x + 1, bboxes_[bbox_index].size().y + 1));
		
		image::dilate( subbuf_view, boost::gil::view( tmp_), subbuf_view, g / aspect_ / subsample_, g / subsample_);
		*/
		boost::gil::fill_pixels( boost::gil::view( tmp_), image::gray_pixel_t( 0));
		image::dilate( buf_view, boost::gil::view( tmp_), buf_view, g / aspect_ / subsample_, g / subsample_);
	}

	Imath::V2f blur = s.blur();
	if( blur.x != 0.0f || blur.y != 0.0f)
	{
		boost::gil::fill_pixels( boost::gil::view( tmp_), image::gray_pixel_t( 0));
		image::box_blur_gray( buf_view, boost::gil::view( tmp_), buf_view, blur.x / aspect_ / subsample_, blur.y / subsample_, 1);
	}
	
	Imath::Box2i common_area = ImathExt::intersect( area_, filtered_bboxes_[bbox_index]);
	
	if( !common_area.isEmpty())
	{
		
		image::gray_image_view_t bg_view( boost::gil::subimage_view( boost::gil::view( pixels_), 
																	 common_area.min.x - area_.min.x, 
																	 common_area.min.y - area_.min.y, 
																	 common_area.size().x, 
																	 common_area.size().y));
		
		boost::gil::tbb_transform2_pixels( boost::gil::subimage_view( buf_view, 
																	  common_area.min.x - filtered_bboxes_[bbox_index].min.x, 
																	  common_area.min.y - filtered_bboxes_[bbox_index].min.y, 
																	  common_area.size().x, 
																	  common_area.size().y),
										   bg_view, bg_view, composite_layer( s.color(), s.opacity()));
	}
}