“Open and Save File”#
This sample program demonstrates how to use the ImageSDK, separately from the CameraSDK, to open an IIQ file, decompress it and save the decompressed data into a new file.
Full Source code#
#include <iostream> // Print out messages to the console
#include <fstream> // Save to file
#include <P1Camera.hpp> // CameraSDK
#include <P1Image.hpp> // ImageSDK
// Open a file and decompress into a new file
int main(int argc, const char** argv)
{
// All calls to the ImageSDK must be wrapped in a try-catch, because all exceptions
// are used to report errors, etc.
try
{
// Parse IIQ file
P1::ImageSdk::RawImage image("test_input.iiq");
// Decode image data with default values
P1::ImageSdk::DecodeConfig decodeConfig = P1::ImageSdk::DecodeConfig::Defaults;
P1::ImageSdk::SensorBayerOutput decodedImage = image.Decode(decodeConfig);
std::cout << "Decoded image size: " << decodedImage.ByteSize()
<< " Height=" << decodedImage.FullHeight()
<< " Width=" << decodedImage.FullWidth() << std::endl;
// Write decoded bitmap to file
std::fstream rawFile("bitmap.bin", std::ios::binary | std::ios::trunc |
std::ios::out);
rawFile.write((char*)decodedImage.Data().get(), decodedImage.ByteSize());
rawFile.close();
std::cout << "Program successfully completed" << std::endl;
return 0;
}
catch (P1::ImageSdk::SdkException exception)
{
// Exception from ImageSDK
std::cout << "Exception: " << exception.what() << " Code:" << exception.mCode
<< std::endl;
return 1;
}
catch (...)
{
// Any other exception - just in case
std::cout << "Argh - we got an exception" << std::endl;
return 1;
}
}
using System;
using P1.CameraSdk;
using P1.ImageSdk;
namespace TestDocumentation2Cs
{
class Program
{
static int Main(string[] args)
{
try
{
RawImage image = new RawImage("../../../test_input.iiq");
// Decode image data with default values
DecodeConfig decodeConfig = DecodeConfig.Defaults();
SensorBayerOutput decodedImage = image.Decode(decodeConfig);
Console.WriteLine("Decoded image size: {0}, Dimension: {1} x {2}",
decodedImage.ByteSize, decodedImage.FullWidth, decodedImage.FullHeight);
// Write decoded bitmap to file
System.IO.File.WriteAllBytes("bitmapBayer.bin", decodedImage.Data);
return 0;
}
catch(P1.ImageSdk.SdkException e)
{
Console.WriteLine("Image SDK error {0} : {1}", e.Code, e.Message);
return 1;
}
catch (Exception e)
{
Console.WriteLine("Output: Any other error: {0}", e.Message);
return 1;
}
}
}
}
Decode Methods#
When decoding the image through the ImageSDK Decode pipeline (see Decode Pipeline), it is possible to substitute the image.Decode(decodeConfig)
method with the decodeConfig.ApplyTo(image)
method, which yields the same result:
// Decode image data with default values
P1::ImageSdk::DecodeConfig decodeConfig = P1::ImageSdk::DecodeConfig::Defaults;
P1::ImageSdk::SensorBayerOutput decodedImage = decodeConfig.ApplyTo(image);
// Decode image data with default values
DecodeConfig decodeConfig = DecodeConfig.Defaults();
SensorBayerOutput decodedImage = decodeConfig.ApplyTo(image);