本文整理汇总了C++中imath::Box2i类的典型用法代码示例。如果您正苦于以下问题:C++ Box2i类的具体用法?C++ Box2i怎么用?C++ Box2i使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Box2i类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: readTypedChannel
DataPtr JPEGImageReader::readTypedChannel( const std::string &name, const Imath::Box2i &dataWindow, int channelOffset )
{
int area = ( dataWindow.size().x + 1 ) * ( dataWindow.size().y + 1 );
assert( area >= 0 );
int dataWidth = 1 + dataWindow.size().x;
int dataY = 0;
typedef TypedData< std::vector< V > > TargetVector;
typename TargetVector::Ptr dataContainer = new TargetVector();
typename TargetVector::ValueType &data = dataContainer->writable();
data.resize( area );
ScaledDataConversion< unsigned char, V> converter;
for ( int y = dataWindow.min.y; y <= dataWindow.max.y; ++y, ++dataY )
{
typename TargetVector::ValueType::size_type dataOffset = dataY * dataWidth;
for ( int x = dataWindow.min.x; x <= dataWindow.max.x; ++x, ++dataOffset )
{
assert( dataOffset < data.size() );
data[dataOffset] = converter( m_buffer[ m_numChannels * ( y * m_bufferWidth + x ) + channelOffset ] );
}
}
return dataContainer;
}
示例2: do_process
void exposure_node_t::do_process( const image::const_image_view_t& src, const image::image_view_t& dst, const render::render_context_t& context)
{
image::const_image_view_t src_view;
image::image_view_t dst_view;
Imath::Box2i area;
if( input(1))
{
boost::gil::copy_pixels( src, dst);
area = intersect( input(1)->defined(), defined());
if( area.isEmpty())
return;
src_view = input(0)->const_subimage_view( area);
dst_view = subimage_view( area);
}
else
{
src_view = src;
dst_view = dst;
}
boost::gil::tbb_transform_pixels( src_view, dst_view, exposure_fun( get_value<float>( param( "exp"))));
if( input(1))
image::key_mix( src_view, dst_view, boost::gil::nth_channel_view( input(1)->const_subimage_view( area), 3), dst_view);
}
示例3: do_calc_bounds
void layer_node_t::do_calc_bounds( const render::context_t& context)
{
Imath::Box2i bbox;
float opacity = get_value<float>( param( "opacity"));
if( opacity == 1.0f)
{
switch( get_value<int>( param( "layer_mode")))
{
case comp_mult:
case comp_min:
case comp_mix:
bbox = ImathExt::intersect( input_as<image_node_t>( 0)->bounds(), input_as<image_node_t>( 1)->bounds());
break;
case comp_sub:
bbox = input_as<image_node_t>( 0)->bounds();
break;
default:
bbox = input_as<image_node_t>( 0)->bounds();
bbox.extendBy( input_as<image_node_t>( 1)->bounds());
}
}
else
{
bbox = input_as<image_node_t>( 0)->bounds();
bbox.extendBy( input_as<image_node_t>( 1)->bounds());
}
set_bounds( bbox);
}
示例4: do_process
void expand_node_t::do_process( const render::context_t& context)
{
Imath::Box2i area = ImathExt::intersect( input_as<image_node_t>()->defined(), defined());
if( area.isEmpty())
return;
boost::gil::copy_pixels( input_as<image_node_t>()->const_subimage_view( area), subimage_view( area));
}
示例5: do_process
void crop_node_t::do_process( const render::render_context_t& context)
{
Imath::Box2i area = intersect( input()->defined(), defined());
if( area.isEmpty())
return;
boost::gil::copy_pixels( input()->const_subimage_view( area), subimage_view( area));
}
示例6:
Imath::Box2i CopyChannels::computeDataWindow( const Gaffer::Context *context, const ImagePlug *parent ) const
{
Imath::Box2i dataWindow;
for( ImagePlugIterator it( inPlugs() ); !it.done(); ++it )
{
dataWindow.extendBy( (*it)->dataWindowPlug()->getValue() );
}
return dataWindow;
}
示例7:
Imath::Box2i Merge::computeDataWindow( const Gaffer::Context *context, const ImagePlug *parent ) const
{
Imath::Box2i dataWindow;
for( ImagePlugIterator it( inPlugs() ); !it.done(); ++it )
{
// We don't need to check that the plug is connected here as unconnected plugs don't have data windows.
dataWindow.extendBy( (*it)->dataWindowPlug()->getValue() );
}
return dataWindow;
}
示例8: compute
void ImageStats::compute( ValuePlug *output, const Context *context ) const
{
const int colorIndex = ::colorIndex( output );
if( colorIndex == -1 )
{
// Not a plug we know about
ComputeNode::compute( output, context );
return;
}
const std::string channelName = this->channelName( colorIndex );
const Imath::Box2i area = areaPlug()->getValue();
if( channelName.empty() || BufferAlgo::empty( area ) )
{
output->setToDefault();
return;
}
// Loop over the ROI and compute the min, max and average channel values and then set our outputs.
Sampler s( inPlug(), channelName, area );
float min = Imath::limits<float>::max();
float max = Imath::limits<float>::min();
double sum = 0.;
for( int y = area.min.y; y < area.max.y; ++y )
{
for( int x = area.min.x; x < area.max.x; ++x )
{
float v = s.sample( x, y );
min = std::min( v, min );
max = std::max( v, max );
sum += v;
}
}
if( output->parent<Plug>() == minPlug() )
{
static_cast<FloatPlug *>( output )->setValue( min );
}
else if( output->parent<Plug>() == maxPlug() )
{
static_cast<FloatPlug *>( output )->setValue( max );
}
else if( output->parent<Plug>() == averagePlug() )
{
static_cast<FloatPlug *>( output )->setValue(
sum / double( (area.size().x) * (area.size().y) )
);
}
}
示例9: make_color_bars
void make_color_bars( const image_view_t& view, const Imath::Box2i& domain, const Imath::Box2i& defined)
{
typedef detail::color_bars_fn deref_t;
typedef deref_t::point_t point_t;
typedef boost::gil::virtual_2d_locator<deref_t,false> locator_t;
typedef boost::gil::image_view<locator_t> my_virt_view_t;
point_t dims( domain.size().x+1, domain.size().y+1);
my_virt_view_t bars( dims, locator_t( point_t(0,0), point_t(1,1), deref_t( dims)));
boost::gil::copy_pixels( boost::gil::subimage_view( bars, defined.min.x - domain.min.x,
defined.min.y - domain.min.y,
defined.size().x+1, defined.size().y+1), view);
}
示例10: view
image_t *clip_t::get_output_image( OfxTime time, OfxRectD *optionalBounds)
{
RAMEN_ASSERT( node());
RAMEN_ASSERT( node()->composition());
RAMEN_ASSERT( !node()->image_empty());
RAMEN_ASSERT( time == node()->composition()->frame());
RAMEN_ASSERT( getComponents() == kOfxImageComponentRGBA);
RAMEN_ASSERT( getPixelDepth() == kOfxBitDepthFloat);
Imath::Box2i area;
if( optionalBounds)
{
area = Imath::Box2i( Imath::V2i( optionalBounds->x1, optionalBounds->y1), Imath::V2i( optionalBounds->x2 - 1, optionalBounds->y2 - 1));
area = Imath::scale( area, 1.0f / node()->render_context().subsample);
area = node()->vertical_flip( area);
}
else
area = node()->defined();
if( area.isEmpty())
{
#ifndef NDEBUG
DLOG( INFO) << "clip_t::getOutputImage, node = " << node()->name() << ", area == empty";
#endif
return 0;
}
image::const_image_view_t view( node()->const_subimage_view( area));
int rowbytes;
void *ptr = view_get_ptr_and_stride( view, rowbytes);
// convert to OFX coordinate sys
area = node()->vertical_flip( area);
OfxRectI bounds;
bounds.x1 = area.min.x;
bounds.y1 = area.min.y;
bounds.x2 = area.max.x + 1;
bounds.y2 = area.max.y + 1;
#ifndef NDEBUG
DLOG( INFO) << "clip_t::getOutputImage, node = " << node()->name();
#endif
return new image_t( *this, node()->image(), 1.0 / node()->render_context().subsample, ptr, bounds, bounds, rowbytes, std::string( ""));
}
示例11: pivotPlug
Imath::M33f Transform2DPlug::matrix( const Imath::Box2i &displayWindow, double pixelAspect ) const
{
// We need to transform from image space (with 0x0 being the bottom left)
// to Gadget space (where 0x0 is the top left). To do this, we need to know the
// size of the Format.
///\todo: We don't handle the pixel aspect of the format here but we should!
float formatHeight = displayWindow.size().y + 1;
M33f p;
V2f pivotVec = pivotPlug()->getValue();
pivotVec.y = formatHeight - pivotVec.y;
p.translate( pivotVec );
M33f t;
V2f translateVec = translatePlug()->getValue();
translateVec.y *= -1.;
t.translate( translateVec );
M33f r;
r.rotate( IECore::degreesToRadians( rotatePlug()->getValue() ) );
M33f s;
s.scale( scalePlug()->getValue() );
M33f pi;
pi.translate( pivotVec*Imath::V2f(-1.f) );
M33f result = pi * s * r * t * p;
return result;
}
示例12: hd
TiledRgbaOutputFile::TiledRgbaOutputFile
(const char name[],
int tileXSize,
int tileYSize,
LevelMode mode,
LevelRoundingMode rmode,
const Imath::Box2i &displayWindow,
const Imath::Box2i &dataWindow,
RgbaChannels rgbaChannels,
float pixelAspectRatio,
const Imath::V2f screenWindowCenter,
float screenWindowWidth,
LineOrder lineOrder,
Compression compression,
int numThreads)
:
_outputFile (0),
_toYa (0)
{
Header hd (displayWindow,
dataWindow.isEmpty()? displayWindow: dataWindow,
pixelAspectRatio,
screenWindowCenter,
screenWindowWidth,
lineOrder,
compression);
insertChannels (hd, rgbaChannels, name);
hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode));
_outputFile = new TiledOutputFile (name, hd, numThreads);
if (rgbaChannels & WRITE_Y)
_toYa = new ToYa (*_outputFile, rgbaChannels);
}
示例13: render
void image_node_renderer_t::render( const Imath::Box2i& roi)
{
RAMEN_ASSERT( has_context_);
RAMEN_ASSERT( !roi.isEmpty());
n_->set_interest( roi);
breadth_first_inputs_apply( *n_, boost::bind( &image_node_t::calc_inputs_interest_fun, _1, new_context_));
depth_first_inputs_search( *n_, boost::bind( &image_node_t::calc_defined_fun, _1, new_context_));
depth_first_inputs_search( *n_, boost::bind( &image_node_t::subsample_areas_fun, _1, new_context_));
if( do_log)
depth_first_inputs_search( *n_, test_empty_images());
depth_first_inputs_search( *n_, boost::bind( &node_t::clear_hash, _1));
depth_first_inputs_search( *n_, boost::bind( &node_t::calc_hash_str, _1, new_context_));
if( do_log)
depth_first_inputs_search( *n_, print_areas());
try
{
n_->recursive_process( new_context_);
render_done_ = true;
}
catch( std::bad_alloc&)
{
throw boost::enable_error_info( std::bad_alloc());
}
}
示例14: hd
RgbaOutputFile::RgbaOutputFile (const char name[],
const Imath::Box2i &displayWindow,
const Imath::Box2i &dataWindow,
RgbaChannels rgbaChannels,
float pixelAspectRatio,
const Imath::V2f screenWindowCenter,
float screenWindowWidth,
LineOrder lineOrder,
Compression compression):
_outputFile (0)
{
Header hd (displayWindow,
dataWindow.isEmpty()? displayWindow: dataWindow,
pixelAspectRatio,
screenWindowCenter,
screenWindowWidth,
lineOrder,
compression);
ChannelList ch;
if (rgbaChannels & WRITE_R)
ch.insert ("R", Channel (HALF, 1, 1));
if (rgbaChannels & WRITE_G)
ch.insert ("G", Channel (HALF, 1, 1));
if (rgbaChannels & WRITE_B)
ch.insert ("B", Channel (HALF, 1, 1));
if (rgbaChannels & WRITE_A)
ch.insert ("A", Channel (HALF, 1, 1));
hd.channels() = ch;
_outputFile = new OutputFile (name, hd);
}
示例15: newHeader
AcesOutputFile::AcesOutputFile
(const std::string &name,
const Imath::Box2i &displayWindow,
const Imath::Box2i &dataWindow,
RgbaChannels rgbaChannels,
float pixelAspectRatio,
const Imath::V2f screenWindowCenter,
float screenWindowWidth,
LineOrder lineOrder,
Compression compression,
int numThreads)
:
_data (new Data)
{
checkCompression (compression);
Header newHeader (displayWindow,
dataWindow.isEmpty()? displayWindow: dataWindow,
pixelAspectRatio,
screenWindowCenter,
screenWindowWidth,
lineOrder,
compression);
addChromaticities (newHeader, acesChromaticities());
addAdoptedNeutral (newHeader, acesChromaticities().white);
_data->rgbaFile = new RgbaOutputFile (name.c_str(),
newHeader,
rgbaChannels,
numThreads);
_data->rgbaFile->setYCRounding (7, 6);
}