本文整理汇总了C++中InStream::Open方法的典型用法代码示例。如果您正苦于以下问题:C++ InStream::Open方法的具体用法?C++ InStream::Open怎么用?C++ InStream::Open使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类InStream
的用法示例。
在下文中一共展示了InStream::Open方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: InStream
bool
DPXInput::open (const std::string &name, ImageSpec &newspec)
{
// open the image
m_stream = new InStream();
if (! m_stream->Open(name.c_str())) {
error ("Could not open file \"%s\"", name.c_str());
return false;
}
m_dpx.SetInStream(m_stream);
if (! m_dpx.ReadHeader()) {
error ("Could not read header");
return false;
}
bool ok = seek_subimage (0, 0, newspec);
newspec = spec ();
return ok;
}
示例2: main
int main(int argc, char **argv)
{
int offset = 1;
bool write8bit = false;
//bool write8bit = true;
if (argc == 4 && strcmp(argv[1], "-8") == 0)
{
write8bit = true;
offset++;
}
else if (argc != 3)
{
Usage();
return 1;
}
// open the image
InStream img;
if (!img.Open(argv[offset]))
{
cout << "Unable to open file " << argv[1] << endl;
return 1;
}
dpx::Reader dpx;
dpx.SetInStream(&img);
if (!dpx.ReadHeader())
{
cout << "Unable to read header" << endl;
return 2;
}
TIFF *out;
out = TIFFOpen(argv[offset+1], "w");
if (out == NULL)
{
cout << "Unable to open output file" << endl;
return 3;
}
// data size, override if user specifies
dpx::DataSize size = dpx.header.ComponentDataSize(0);
int nob = dpx.header.ComponentByteCount(0);
if (write8bit)
{
size = dpx::kByte;
nob = 1;
}
cout << "Image Width " << dpx.header.Width() << " Height " <<
dpx.header.Height() << " component byte count " <<
dpx.header.ComponentByteCount(0) << endl;
// conversion
int format = PHOTOMETRIC_RGB;
int elementCount = 3;
if (dpx.header.ImageElementComponentCount(0) == 1) {
format = PHOTOMETRIC_MINISBLACK;
elementCount = 1;
}
TIFFSetField(out, TIFFTAG_IMAGEWIDTH, (uint32) dpx.header.Width());
TIFFSetField(out, TIFFTAG_IMAGELENGTH, (uint32) dpx.header.Height());
TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, (uint32) nob * 8);
TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, elementCount);
TIFFSetField(out, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField(out, TIFFTAG_PHOTOMETRIC, format);
TIFFSetField(out, TIFFTAG_MINSAMPLEVALUE, 0);
int max = 0xff;
if (nob == 2)
max = 0xffff;
else
max = 0xffffffff;
TIFFSetField(out, TIFFTAG_MAXSAMPLEVALUE, max);
tdata_t buf = _TIFFmalloc(TIFFScanlineSize(out));
if (buf == NULL)
{
cout << "memory allocation error" << endl;
return 4;
}
Block block(0, 0, dpx.header.Width()-1, 0);
int y;
for (y = 0; y < dpx.header.Height(); y++)
{
block.y1 = y;
block.y2 = y;
if (dpx.ReadBlock(buf, size, block, dpx.header.ImageDescriptor(0)) == false)
{
cout << "unable to read line " << y << " with component data size " << size << endl;
return 5;
}
if (TIFFWriteScanline(out, buf, y, 0) < 0)
{
//.........这里部分代码省略.........
示例3: InStream
OIIO_PLUGIN_EXPORTS_END
bool
CineonInput::open (const std::string &name, ImageSpec &newspec)
{
// open the image
m_stream = new InStream();
if (! m_stream->Open(name.c_str())) {
error ("Could not open file \"%s\"", name.c_str());
return false;
}
m_cin.SetInStream(m_stream);
if (! m_cin.ReadHeader()) {
error ("Could not read header");
return false;
}
// create imagespec
TypeDesc typedesc;
int maxbits = 0;
for (int i = 0; i < m_cin.header.NumberOfElements (); i++) {
if (maxbits < m_cin.header.BitDepth (i))
maxbits = m_cin.header.BitDepth (i);
}
switch ((maxbits + 7) / 8) {
case 1:
typedesc = TypeDesc::UINT8;
break;
case 2:
typedesc = TypeDesc::UINT16;
break;
case 3:
case 4:
typedesc = TypeDesc::UINT32;
break;
default:
error ("Unsupported bit depth %d", maxbits);
return false;
}
m_spec = ImageSpec (m_cin.header.Width(), m_cin.header.Height(),
m_cin.header.NumberOfElements (), typedesc);
// fill channel names
m_spec.channelnames.clear ();
int gscount = 0, rcount = 0, gcount = 0, bcount = 0;
char buf[3];
for (int i = 0; i < m_cin.header.NumberOfElements (); i++) {
switch (m_cin.header.ImageDescriptor (i)) {
case cineon::kGrayscale:
if (++gscount > 1) {
std::string ch = Strutil::format ("I%d", gscount);
m_spec.channelnames.push_back (ch);
} else
m_spec.channelnames.emplace_back("I");
break;
case cineon::kPrintingDensityRed:
case cineon::kRec709Red:
if (++gscount > 1) {
std::string ch = Strutil::format ("R%d", rcount);
m_spec.channelnames.push_back (ch);
} else
m_spec.channelnames.emplace_back("R");
break;
case cineon::kPrintingDensityGreen:
case cineon::kRec709Green:
if (++gcount > 1) {
std::string ch = Strutil::format ("G%d", gcount);
m_spec.channelnames.push_back (ch);
} else
m_spec.channelnames.emplace_back("G");
break;
case cineon::kPrintingDensityBlue:
case cineon::kRec709Blue:
if (++bcount > 1) {
std::string ch = Strutil::format ("B%d", bcount);
m_spec.channelnames.push_back (ch);
} else
m_spec.channelnames.emplace_back("B");
break;
default:
std::string ch = Strutil::format ("channel%d", (int)m_spec.channelnames.size());
m_spec.channelnames.push_back (ch);
break;
}
}
// bits per sample
m_spec.attribute ("oiio:BitsPerSample", maxbits);
// image orientation - see appendix B.2 of the OIIO documentation
int orientation;
switch (m_cin.header.ImageOrientation ()) {
case cineon::kLeftToRightTopToBottom:
orientation = 1;
break;
case cineon::kRightToLeftTopToBottom:
orientation = 2;
break;
case cineon::kLeftToRightBottomToTop:
orientation = 4;
//.........这里部分代码省略.........