[вернуться к оглавлению]

# Обзор LibRaw API (C++)

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

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

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

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

    #include "libraw/libraw.h"
    int process_image(char *file)
    {
            // Cоздадим обработчик изображений
            LibRaw iProcessor;

            // Открыть файл и считать метаданные
            iProcessor.open_file(file);

            // Метаданные доступны в полях данных класса
            printf("Image size: %d x %d\n",iProcessor.imgdata.sizes.width,iProcessor.imgdata.sizes.height);

            // Распакуем изображение
            iProcessor.unpack();

            // Преобразуем из iProcessor.rawdata... в iProcessor.image
            iProcessor.raw2image();

            // И напечатаем его дамп, данные доступны в полях данных класса
            for(i = 0;i lt; iProcessor.imgdata.sizes.iwidth *  iProcessor.imgdata.sizes.iheight; i++)
               printf("i=%d R=%d G=%d B=%d G2=%d\n",
                            i,
                            iProcessor.imgdata.image[i][0],
                            iProcessor.imgdata.image[i][1],
                            iProcessor.imgdata.image[i][2],
                            iProcessor.imgdata.image[i][3]
                    );

            // Освободим процессор для работы со следующим изображением
            iProcessor.recycle();
    }

[вернуться к оглавлению]

Last modified: Mon Oct 24 13:10:54 MSD 2011