Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
The standard CAN/CSA ISO/IEC 12089-01:1995 (also referenced as IEC 12089-01) is the Canadian adoption of the international ISO/IEC 12089-1 standard, which defines the C language bindings for the Image Processing and Interchange (IPI) Application Program Interface (API). As part of the IPI family of standards (ISO/IEC 12087 and ISO/IEC 12088), this document specifies a set of function calls, data types, and error-handling mechanisms that enable portable, platform-independent image processing software development.
The IPI API provides a common architectural framework for imaging applications, including image creation, manipulation, storage, and interchange. The bindings in C were chosen to cover a wide range of systems, from embedded imaging devices to high-performance workstations. This standard is essential for developers who require consistent access to imaging functions without reliance on proprietary libraries.
The standard defines the IPI API as a collection of operations organized into four logical groups:
All API functions follow a ipi_ prefix naming convention and return an IPI_Status code indicating success or specific error conditions. The standard mandates that implementations support signed and unsigned 8-bit, 16-bit, and 32-bit integer pixel data, as well as IEEE 754 single-precision floating point.
The following table summarizes the key functions specified in the C bindings:
| Function | Purpose | Return Type |
|---|---|---|
ipiCreateImage | Allocate an image object with given dimensions and pixel type. | IPI_Image handle |
ipiDestroyImage | Release all resources associated with an image. | IPI_Status |
ipiGetPixel | Retrieve the value of a pixel at specified coordinates. | IPI_Status |
ipiPutPixel | Set the value of a pixel at specified coordinates. | IPI_Status |
ipiTransformImage | Apply a predefined transformation (e.g., resize, rotate) to an image. | IPI_Status |
ipiSaveToInterchange | Encode image into IPI interchange format. | IPI_Status |
ipiLoadFromInterchange | Decode image from IPI interchange format. | IPI_Status |
IPI_Status return value before using data obtained from ipiGetPixel or ipiLoadFromInterchange.One of the primary goals of ISO/IEC 12089-01 is to promote source-level portability. By adhering to the API defined in the C language bindings, an application can be recompiled against any conforming implementation with minimal changes. The standard achieves this by:
typedefs for all IPI data types (e.g., IPI_Byte, IPI_Uint16, IPI_Float32) to insulate code from platform-specific sizes.IPI_SUCCESS, IPI_INVALID_PARAMETER, IPI_MEMORY_FAULT, etc.).IPI_Layout parameter.The standard allows vendor-defined extensions through the use of reserved identifier prefixes (ipi_vendor_) and custom transformation codes. However, these extensions must not conflict with the mandated function signatures and error codes. The committee also provides guidance for migrating from earlier ISO/IEC 12087-based implementations to the API-centric model of ISO/IEC 12089.
Conformance to CAN/CSA ISO/IEC 12089-01 is verified through a combination of static analysis and runtime test suites. The standard does not currently require third-party certification, but many industry consortia recommend self-certification using the IPI Validation Suite published by the ISO/IEC JTC 1/SC 24 committee.
ipiSetPixelBlock (removed in the 1995 revision) can cause compilation failures with modern implementations. Always refer to the latest corrigenda.Developers should run the IPI Conformance Test Suite, which includes over 500 test cases covering pixel accuracy, transformation mathematical correctness, and interchange format parsing. At a minimum, tests for the 8-bit grayscale and 24-bit RGB pixel types are recommended before claiming compliance.
ipiLoadFromInterchange function parses this header automatically.Published 2026 – Technical overview for developers and compliance engineers.