Skip to content
Mateusz Loskot edited this page Apr 12, 2018 · 26 revisions

Status

  • Draft under heavy brainstorm
  • Accepted ideas are submitted as issues/PRs to Boost.GIL 3 project.

Modern C++

  • Good outline of the C++11 Metaprogramming by Peter Dimov - Part 1 and Part 2
  • Use Boost.Hana for metaprogramming, defining types like pixel, color spaces, etc.
  • make use of c++11 features, like delegating constructor
  • using variadic templates will help
  • make use of overlapping functionality with boost::geometry, like point type registration. See Andrew Hundt's email from 2013/03/13
  • pixel should have a begin() and end() members.
  • make Alignment a template parameter for image class
  • use boost::fusion for defining pixel and color spaces. See emails

Library structure

Boost.GIL 3 Documentation

  • Structure (prose, API reference)

Tutorials

Interesting Q&A on Boost mailing list, StackOverflow and other places as candidates for tutorials:

Performance

  • Use OpenCV as backend?

New type for subsampled image

  • image class has a boolean template parameter defining wheather or not an image is planar.
  • view_t is defined with view_type_from_pixel
  • if planar == true then special allocate_( ... )

Extension: IO

Add support for low level image libs

Designing a JPEG Decoder & Source Code

Raw format

Understanding What is stored in a Canon RAW .CR2 file, How and Why

OS support

Window's Device Independent Bitmap https://msdn.microsoft.com/en-us/library/windows/desktop/dd183562(v=vs.85).aspx

GDAL support

JPEG XR support

Interoperability with similar libraries

http://developers.slashdot.org/story/14/01/04/2115249/cairo-2d-graphics-may-become-part-of-iso-c

Extension: Color Management

Lea Verou writes: To accurately convert values from RGB to CMYK and vice versa, the way Photoshop does, you need to use an ICC color profile. All the simple algorithmic solutions you'll find in the interwebs (like the one posted above) are inacurrate and produce colors that are outside the CMYK color gamut (for example they convert CMYK(100, 0, 0, 0) to rgb(0, 255, 255) which is obviously wrong since rgb(0, 255, 255) can't be reproduced with CMYK). Look into the java.awt.color.ICC_ColorSpace and java.awt.color.ICC_Profile classes for converting colors using ICC color profiles. As for the color profile files themselves, Adobe distributes them for free. (http://stackoverflow.com/questions/4858131/rgb-to-cmyk-and-back-algorithm)

book http://www.amazon.com/Color-Management-Understanding-Profiles-Technology/dp/0470058250/ref=sr_1_1?ie=UTF8&qid=1360260936&tag=fithfi-20

web resources: http://www.color.org/faqs.xalter http://en.wikipedia.org/wiki/ICC_profile

implementations https://docs.oracle.com/javase/7/docs/api/java/awt/color/ICC_ColorSpace.html

Better YUV

http://en.wikipedia.org/wiki/Common_Intermediate_Format

Some Links:


Old bag

These ideas are old and might be obsolete.

Clone this wiki locally