Introduction
Introduction Statistics Contact Development Disclaimer Help
Use linear RGB - farbfeld - suckless image format with conversion tools
git clone git://git.suckless.org/farbfeld
Log
Files
Refs
README
LICENSE
---
commit e9feca5c2bda05b9a356617868fd4b08ec903d0d
parent 291e677210c6c2c1d1eba2f0ba2243806ef63b07
Author: FRIGN <[email protected]>
Date: Wed, 20 Jan 2016 22:31:25 +0100
Use linear RGB
Makes things a lot easier for image manipulation algorithms which
can be expected to be applied to farbfeld data.
Diffstat:
M FORMAT | 27 +++++++++++++++------------
M ff2png.c | 23 +++++++++++++----------
M jpg2ff.c | 10 +++++-----
M png2ff.c | 10 +++++-----
4 files changed, 38 insertions(+), 32 deletions(-)
---
diff --git a/FORMAT b/FORMAT
@@ -1,15 +1,18 @@
FARBFELD IMAGE FORMAT SPECIFICATION
- +--------+-------------------------------------------------------+
- | Bytes | Description |
- +--------+-------------------------------------------------------+
- | 8 | "farbfeld" magic value |
- +--------+-------------------------------------------------------+
- | 4 | 32-Bit BE unsigned integer (width) |
- +--------+-------------------------------------------------------+
- | 4 | 32-Bit BE unsigned integer (height) |
- +--------+-------------------------------------------------------+
- | [2222] | 4*16-Bit BE unsigned integers [RGBA] / pixel |
- | | pixels in rows, ProPhoto RGB, not alpha-premultiplied |
- +--------+-------------------------------------------------------+
+ +--------+-----------------------------------------------+
+ | Bytes | Description |
+ +--------+-----------------------------------------------+
+ | 8 | "farbfeld" magic value |
+ +--------+-----------------------------------------------+
+ | 4 | 32-Bit BE unsigned integer (width) |
+ +--------+-----------------------------------------------+
+ | 4 | 32-Bit BE unsigned integer (height) |
+ +--------+-----------------------------------------------+
+ | [2222] | 4*16-Bit BE unsigned integers [RGBA] / pixel |
+ | | - pixels in rows |
+ | | - linear ROMM RGB (ISO 22028-2:2013) |
+ | | (= linear ProPhoto RGB = Melissa RGB) |
+ | | - no alpha premultiplication |
+ +--------+-----------------------------------------------+
diff --git a/ff2png.c b/ff2png.c
@@ -14,7 +14,7 @@
static char *argv0;
-/* ProPhoto RGB */
+/* ROMM RGB primaries (ISO 22028-2:2013) */
static cmsCIExyYTRIPLE primaries = {
/* x, y, Y */
{ 0.7347, 0.2653, 0.288040 }, /* red */
@@ -34,8 +34,8 @@ main(int argc, char *argv[])
{
cmsContext icc_context;
cmsHPROFILE out_prof;
- cmsMLU *mlu1, *mlu2;
- cmsToneCurve *gamma18, *out_curve[3];
+ cmsMLU *mlu1, *mlu2, *mlu3;
+ cmsToneCurve *gamma10, *out_curve[3];
png_structp pngs;
png_infop pngi;
size_t png_row_len, j;
@@ -62,25 +62,27 @@ main(int argc, char *argv[])
width = ntohl(*((uint32_t *)(hdr + 8)));
height = ntohl(*((uint32_t *)(hdr + 12)));
- /* icc profile (ProPhoto RGB) */
+ /* icc profile (linear ROMM RGB (ISO 22028-2:2013)) */
if (!(icc_context = cmsCreateContext(NULL, NULL)))
goto lcmserr;
- if (!(gamma18 = cmsBuildGamma(icc_context, 1.8)))
+ if (!(gamma10 = cmsBuildGamma(icc_context, 1.0)))
goto lcmserr;
- out_curve[0] = out_curve[1] = out_curve[2] = gamma18;
+ out_curve[0] = out_curve[1] = out_curve[2] = gamma10;
if (!(out_prof = cmsCreateRGBProfileTHR(icc_context, cmsD50_xyY(),
&primaries, out_curve)))
goto lcmserr;
cmsSetHeaderFlags(out_prof, cmsEmbeddedProfileTrue | cmsUseAnywhere);
cmsSetHeaderRenderingIntent(out_prof, INTENT_RELATIVE_COLORIMETRIC);
cmsSetDeviceClass(out_prof, cmsSigColorSpaceClass);
- if (!(mlu1 = cmsMLUalloc(NULL, 1)) || !(mlu2 = cmsMLUalloc(NULL, 1)))
+ if (!(mlu1 = cmsMLUalloc(NULL, 1)) || !(mlu2 = cmsMLUalloc(NULL, 1)) ||
+ !(mlu3 = cmsMLUalloc(NULL, 1)))
goto lcmserr;
cmsMLUsetASCII(mlu1, "en", "US", "Public Domain");
cmsWriteTag(out_prof, cmsSigCopyrightTag, mlu1);
- cmsMLUsetASCII(mlu2, "en", "US", "ProPhoto RGB");
- cmsWriteTag(out_prof, cmsSigProfileDescriptionTag, mlu2);
+ cmsMLUsetASCII(mlu2, "en", "US", "aka Linear ProPhoto RGB, Melissa RGB…
cmsWriteTag(out_prof, cmsSigDeviceModelDescTag, mlu2);
+ cmsMLUsetASCII(mlu3, "en", "US", "Linear ROMM RGB (ISO 22028-2:2013)");
+ cmsWriteTag(out_prof, cmsSigProfileDescriptionTag, mlu3);
cmsSaveProfileToMem(out_prof, NULL, &icclen);
if (!(icc = malloc(icclen))) {
fprintf(stderr, "%s: malloc: out of memory\n", argv0);
@@ -101,7 +103,8 @@ main(int argc, char *argv[])
png_set_IHDR(pngs, pngi, width, height, 16, PNG_COLOR_TYPE_RGB_ALPHA,
PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,
PNG_FILTER_TYPE_BASE);
- png_set_iCCP(pngs, pngi, "ProPhoto RGB", 0, icc, icclen);
+ png_set_iCCP(pngs, pngi, "Linear ROMM RGB (ISO 22028-2:2013)", 0,
+ icc, icclen);
png_write_info(pngs, pngi);
/* write rows */
diff --git a/jpg2ff.c b/jpg2ff.c
@@ -12,7 +12,7 @@
static char *argv0;
-/* ProPhoto RGB */
+/* ROMM RGB primaries (ISO 22028-2:2013) */
static cmsCIExyYTRIPLE primaries = {
/* x, y, Y */
{ 0.7347, 0.2653, 0.288040 }, /* red */
@@ -33,7 +33,7 @@ main(int argc, char *argv[])
{
cmsHPROFILE in_profile = NULL, out_profile;
cmsHTRANSFORM transform;
- cmsToneCurve *gamma18, *out_curves[3];
+ cmsToneCurve *gamma10, *out_curves[3];
struct jpeg_decompress_struct cinfo;
jpeg_saved_marker_ptr marker;
struct jpeg_error_mgr jerr;
@@ -97,12 +97,12 @@ main(int argc, char *argv[])
return 1;
}
- /* icc profile (output ProPhoto RGB) */
+ /* icc profile (output linear ROMM RGB (ISO 22028-2:2013)) */
if (!in_profile && !(in_profile = cmsCreate_sRGBProfile()))
goto lcmserr;
- if (!(gamma18 = cmsBuildGamma(NULL, 1.8)))
+ if (!(gamma10 = cmsBuildGamma(NULL, 1.0)))
goto lcmserr;
- out_curves[0] = out_curves[1] = out_curves[2] = gamma18;
+ out_curves[0] = out_curves[1] = out_curves[2] = gamma10;
if (!(out_profile = cmsCreateRGBProfile(cmsD50_xyY(), &primaries,
out_curves)))
goto lcmserr;
diff --git a/png2ff.c b/png2ff.c
@@ -12,7 +12,7 @@
static char *argv0;
-/* ProPhoto RGB */
+/* ROMM RGB primaries (ISO 22028-2:2013) */
static cmsCIExyYTRIPLE primaries = {
/* x, y, Y */
{ 0.7347, 0.2653, 0.288040 }, /* red */
@@ -32,7 +32,7 @@ main(int argc, char *argv[])
{
cmsHPROFILE in_prof, out_prof;
cmsHTRANSFORM trans;
- cmsToneCurve *gamma18, *out_curves[3];
+ cmsToneCurve *gamma10, *out_curves[3];
png_structp pngs;
png_infop pngi;
int icc_compression;
@@ -70,7 +70,7 @@ main(int argc, char *argv[])
height = png_get_image_height(pngs, pngi);
png_row_p = png_get_rows(pngs, pngi);
- /* icc profile (output ProPhoto RGB) */
+ /* icc profile (output linear ROMM RGB (ISO 22028-2:2013)) */
if (png_get_valid(pngs, pngi, PNG_INFO_iCCP)) {
png_get_iCCP(pngs, pngi, &icc_name,
&icc_compression, &icc_data, &icc_len);
@@ -81,9 +81,9 @@ main(int argc, char *argv[])
if (!(in_prof = cmsCreate_sRGBProfile()))
goto lcmserr;
}
- if (!(gamma18 = cmsBuildGamma(NULL, 1.8)))
+ if (!(gamma10 = cmsBuildGamma(NULL, 1.0)))
goto lcmserr;
- out_curves[0] = out_curves[1] = out_curves[2] = gamma18;
+ out_curves[0] = out_curves[1] = out_curves[2] = gamma10;
if (!(out_prof = cmsCreateRGBProfile(cmsD50_xyY(), &primaries,
out_curves)))
goto lcmserr;
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.