Oyranos  git-devel
Oyranos is a full featured Color Management System
Oyranos User API Documentation

Descriptive Contents

Introduction | Compilation | References
Tools Documentation | Environment Variables | User API Documentation | Programming Tutorial | Threading | Extending Oyranos

License
new BSD http://www.opensource.org/licenses/BSD-3-Clause
Author
Kai-Uwe Behrmann and others
Since
March 2004
Internet
http://www.oyranos.org/about
Development
https://gitlab.com/oyranos/oyranos



Introduction

Oyranos is intended as a entry point for color savy applications. In its current stage it configures profile paths, sets default profiles, maps devices to profiles, sets a monitor profile in X and uploads a vcgt tag. This means for instance all applications using Oyranos will use for a incoming digital camera picture the same profile and watch it through the same monitor profile with the same options for rendering intent, simulation and so on.

Tools Documentation

User API Documentation

The basic Oyranos API gets included with oyranos.h. An application, which wants to use these functions, needs to link against Oyranos.

The monitor related interfaces are accessed through Device Handling interfaces. Loading of the according module for the device depedent libraries is done on runtime.

The key names, which Oyranos uses to store its configuration in an Elektra file tree, are defined in oyranos_definitions.h.

Programming Tutorial

Frist you have to put a

#include <oyranos.h>

in your source text, in order to use Oyranos.

int main( int argc, char ** argv ) {
int oyranos_version = oyVersion( 0 );
return 0;
}

oyranos-config –cflags delivers the compiler flags and oyranos-config –ldflags the linker flags.

Then you can put Oyranos functions in your code and compile with:

cc `oyranos-config --cflags --ldflags` mycode.c -o myApp 

to link Oyranos into your application.

The second code sample will be more useful and handle obtaining a monitor profile:

#include <oyranos.h>
#include <oyConversion_s.h>
#include <stdio.h>
int main( int argc OY_UNUSED, char ** argv OY_UNUSED ) {
oyConfigs_s * devices = NULL;
oyConfig_s * monitor = NULL;
oyOptions_s * options = NULL;
oyProfile_s * monitor_icc = NULL;
const char * monitor_icc_dscr = NULL;
// get all monitors
oyDevicesGet( NULL, "monitor", NULL, &devices );
// just pick the first monitor
monitor = oyConfigs_Get( devices, 0 );
/* get XCM_ICC_COLOR_SERVER_TARGET_PROFILE_IN_X_BASE */
"//"OY_TYPE_STD"/config/icc_profile.x_color_region_target", "yes", OY_CREATE_NEW );
oyDeviceGetProfile( monitor, options, &monitor_icc );
// get the profiles internal name
monitor_icc_dscr = oyProfile_GetText( monitor_icc, oyNAME_DESCRIPTION );
printf( "first monitor has profile: %s\n", monitor_icc_dscr );
// now convert some colors from sRGB to monitor space
// find the appropriate profile flags
uint32_t icc_profile_flags =oyICCProfileSelectionFlagsFromOptions( OY_CMM_STD,
"//" OY_TYPE_STD "/icc_color", NULL, 0 );
oyProfile_s * srgb = oyProfile_FromStd( oyASSUMED_WEB, icc_profile_flags, 0 );
float rgb_in[9] = {0,0,0, 0.5,0.5,0.5, 1,1,1};
float rgb_moni[9];
// setup the color context
srgb, rgb_in, OY_TYPE_123_FLOAT,
monitor_icc, rgb_moni, OY_TYPE_123_FLOAT,
NULL, 3 );
// convert by running the conversion graph
// show the source colors and the converted colors
int i;
for(i = 0; i < 3; ++i)
printf("%.02f %.02f %.02f -> %.05f %.05f %.05f\n",
rgb_in[3*i+0],rgb_in[3*i+1],rgb_in[3*i+2], rgb_moni[3*i+0],rgb_moni[3*i+1],rgb_moni[3*i+2]);
return 0;
}

The code is from tutorial1.c

Writing of filters and modules for Oyranos is covered in the Extending Oyranos page.