Обзор API (C++)

Общие положения

  1. Вся обработка ведется экземпляром класса LibRaw - обработчиком изображений.
  2. Один обработчик изображений одновременно может обрабатывать только один исходный файл, последовательно - сколько угодно файлов.
  3. В программе (например, в разных threads) могут одновременно работать несколько обработчиков, хотя следует учитывать, что потребление памяти в обработчике может быть значительным.
  4. Чтение исходных данных RAW-файла практически не требует настроек (об исключениях сказано в API Notes).
  5. Все данные, извлеченные из RAW-файла доступны через поля данных обработчика (экземпляра класса LibRaw).
  6. Несмотря на то, что LibRaw не предназначена для постобработки RAW-данных, в библиотеку включены вызовы, позволяющие полностью воспроизвести поведение утилиты dcraw.
  7. Все настройки обработки производятся через поля данных класса LibRaw.

Краткая демонстрация

Пример ниже не содержит какой-либо обработки ошибок в целях компактности демонстрации

  1. #include "libraw/libraw.h"
  2. int process_image(char *file)
  3. {
  4. // Cоздадим обработчик изображений
  5. LibRaw iProcessor;
  6.  
  7. // Открыть файл и считать метаданные
  8. iProcessor.open_file(file);
  9.  
  10. // Метаданные доступны в <a href="API-datastruct-rus.html">полях данных класса</a>
  11. printf("Image size: %d x %d\n",iProcessor.imgdata.sizes.width,iProcessor.imgdata.sizes.height);
  12.  
  13. // Распакуем изображение
  14. iProcessor.unpack();
  15.  
  16. // Преобразуем из iProcessor.rawdata... в iProcessor.image
  17. iProcessor.raw2image();
  18.  
  19. // И напечатаем его дамп, данные доступны в <a href="API-datastruct-rus.html">полях данных класса</a>
  20. for(i = 0;i lt; iProcessor.imgdata.sizes.iwidth * iProcessor.imgdata.sizes.iheight; i++)
  21. printf("i=%d R=%d G=%d B=%d G2=%d\n",
  22. i,
  23. iProcessor.imgdata.image[i][0],
  24. iProcessor.imgdata.image[i][1],
  25. iProcessor.imgdata.image[i][2],
  26. iProcessor.imgdata.image[i][3]
  27. );
  28.  
  29. // Освободим процессор для работы со следующим изображением
  30. iProcessor.recycle();
  31. }

Comments

Опечатка.

Вот тут:

  1. for(i = 0;i lt; iProcessor.imgdata.sizes.iwidth * iProcessor.imgdata.sizes.iheight; i++)
  2.  
  3. потерялся "&", поэтому вместо "i < ...", сейчас "i lt; ...".

В английской версии тоже.