File: Samples-LibRaw-rus.html

package info (click to toggle)
libraw 0.14.6-2%2Bdeb7u1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 5,728 kB
  • sloc: cpp: 14,132; sh: 10,692; ansic: 10,229; makefile: 87
file content (261 lines) | stat: -rw-r--r-- 17,309 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>LibRaw: примеры использования</title>
  </head>

  <body>
    <a href=index-rus.html>[вернуться к оглавлению]</a>
    <h1>LibRaw: примеры использования</h1>
    
    <h2>Обзор примеров в дистрибутиве (samples/*)</h2>
    <p>В поставку  LibRaw  включено несколько примеров использования библиотеки, их исходные тексты расположены в
      каталоге samples/, после сборки они оказываются в каталоге bin/:</p>
    <ul>
      <li><b>raw-identify</b> Из вызовов  LibRaw используется только <a
          href="API-CXX-rus.html#open_file">open_file()</a>, далее идет код, печатающий значения полей структуры
        imgdata. Выдача <b>raw-identify</b>/<b>raw-identify -v</b> практически полностью копирует выдачу <b>dcraw
          -i</b>/<b>dcraw -i -v </b> (в выдаче примера дополнительно печатаются источники цветовых данных и легенда к
        ним). 
        <p>
          Дополнительные параметры, отсутствующие у dcraw: <b>-u</b> - печатать имя функции - распаковщика данных;
          <b>-u -f</b> - печатать имя распаковщика и размер черной (маскированной) рамки.
        </p>
      </li>
      <li><b>simple_dcraw</b> Простой "эмулятор" dcraw, воспроизводящий поведение <b>dcraw [-D] [-e] [-v]
          [-T]</b>. Результат работы должен бинарно совпадать с результатами работы dcraw запущенной с нужными
        ключами. Упрощенный вариант этого примера <a href="#code">рассмотрен ниже</a>.<br/>
        Ключ <b>-B</b> включает использование <a href="API-CXX-rus.html#open_buffer">интерфейса open_buffer()</a>
        куда передается mmap()-ed файл (Unix only).

      </li>
      <li><b>dcraw_half</b> Демонстрация использования <a href="API-C-rus.html">C API</a>. Пример эмулирует поведение
        <b>dcraw -h</b> (какие-то еще управляющие параметры этому примеру  задать нельзя). Результат работы должен
        бинарно совпадать с результатами работы <b>dcraw -h</b>.
      </li>
      <li><b>dcraw_emu</b> Полный эмулятор dcraw (за исключением ключей -D -d -P -K -i -e, которые обрабатываются в
        других примерах использования). Основной интерес представляет обработка ключей командной строки (скопированная
        из  dcraw). Результат работы должен бинарно совпадать с результатом работы  dcraw с теми же ключами командной
        строки.
        <p>
          Этот пример поддерживает дополнительные ключи, отсутствующие в оригинальной dcraw:
        </p>
        <dl>
          <dt><b>-mmap</b></dt>
          <dd>
            Включает использование <a href="API-CXX-rus.html#open_buffer">интерфейса open_buffer()</a>
            куда передается mmap()-ed файл (Unix only).
          </dd>
          <dt><b>-mem</b></dt>
          <dd>
            Входной файл читается в буфер в памяти и раскодируется оттуда. 
          </dd>
          <dt><b>-c значение в диапазоне 0-1</b></dt>
          <dd>
            Ключ меняет значение параметра <strong>params.adjust_maximum_thr</strong>.
            Для отключения автоматического вычисления максимума, поставьте этот параметр в 0.0.
            <br/>
            Умолчание: 0.75
          </dd>
          <dt><b>-timing</b></dt>
          <dd>
            Включает тайминг отдельных этапов обработки.
          </dd>
          <dt><b>-G</b></dt>
          <dd>
            Включает green_matching: выравнивание каналов зеленого для тех камер, где эти каналы различаются.
          </dd>
          <dt><b>-B x y w h</b></dt>
          <dd>
            Включает обрезание (cropping) выходного изображения до прямоугольника с 
            верхним левым углом в x,y шириной w и высотой h. Координаты и размеры - до поворотов изображения (если 
            применяются повороты).
          </dd>
          <dt><b>-dcbi N</b></dt>
          <dd>Устанавливает количество дополнительных итераций алгоритма DCB (только для -q 4).
            Умолчание - 0 (нет дополнительных итераций)
          </dd>
          <dt><b>-dcbe</b></dt>
          <dd>
            Включает режим DCB color enhance (только для -q 4).
          </dd>
          <dt><b>-eeci</b></dt>
          <dd>
            Включает режим EECI refine (только для mixed VCD/AHD -q 8)
          </dd>
          <dt><b>-esmed N</b></dt>
          <dd>
            Количество проходов edge-sensitive median filter для интерполяции VCD+AHD
          </dd>
          <dt><b>-acae r b</b></dt>
          <dd>
            Включает режим подавления хроматической аберрации. Параметры r и b означают величину коррекции по красной
            и синей осям. Эти параметры обязательны, для автоматической коррекции следует использовать
            -acae 0 0
          </dd>
          <dt><b>-aline l</b></dt>
          <dd>
            Включает режим подавления полосатости (banding). l - степень подавления шума, диапазон значений
            0.001-0.02, типичное значение 0.005
          </dd>
          <dt><b>-aclean l c</b></dt>
          <dd>
            Включает режим подавления импульсного шума. l - степень подавления яркостного (luminocity) шума,
            c - цветового (chrominance) шума. Разумный диапазон значений обоих параметров 0.005-0.05, типовое - 0.01.
          </dd>
          <dt><b>-agreen g</b></dt>
          <dd>
            Включает режим выравнивания зеленых каналов на равномерных поверхностях. g - степень чувствительности
            алгоритма, диапазон значений 0.01-0.1, типичное значение 0.03.
          </dd>
          <dt><b>-aexpo e p</b></dt>
          <dd>
            Включает экспокоррекцию (до демозаики). e - величина экспокоррекции (в линейной шкале), диапазон от 0.25
            (-2 стопа) до 8 (+3 стопа). p - степень предохранения светов при положительной экспокоррекции, диапазон от
            0.0 (просто линейный сдвиг данных с клиппингом) до 1.0 (полное отсутствие дополнительного клиппинга от
            экспокоррекции). 
          </dd>
        </dl>
      </li>
      <li><b>half_mt</b> Эмулятор <b>dcraw -h</b>, понимает ключи -a (автоматический баланс белого по всему
        изображению), -w (баланс белого камеры), -T (выводить в tiff) и -J n - количество параллельных threads,
        запускаемых для обработки изображений.<br/>
        На мультипроцессорных/multicore  машинах дает существенный выигрыш в скорости при массовой обработке.<br/>
        На Win32-машине пример собирается из исходного файла half_mt_win32.c, причина в том, что работа с threads на
        Windows принципиально другая и проще размножить простые исходники, чем написать один сложный. 
      </li>
      <li><b>mem_image</b> Пример использования функций 
        <a  href="API-CXX-rus.html#dcraw_make_mem_image">dcraw_make_mem_image</a> и 
        <a  href="API-CXX-rus.html#dcraw_make_mem_thumb">dcraw_make_mem_thumb</a>: распаковка изображений и preview()
        в память с последующей простой записью в форматах PPM (и JPEG для thumbnail). Результат работы должен быть
        идентичен результатам работы dcraw с теми же ключами (поддерживаются ключи <b>-4, -1, -e, -h</b>). 
      </li>
      <li><b>unprocessed_raw</b> - извлечение максимально неизмененных RAW-данных, без вычитания уровня черного
        и маскирования черных пикселов (на тех камерах, где возможно маскирование). Для тех камер, которые выдают
        в RAW-данные черную рамку (маскированные пикселы) - рамка включается в выдаваемые данные. 
        Ключи командной строки: <b>-q</b> - не выдавать текстовую справку о размерах файла, <b>-A</b> -
        автомасштабирование данных в целое число раз, <b>-g</b> выдавать гамма-корректированные (2.2) данные, а не
        линейные, <b>-N</b> - выключает наложение тоновой кривой на RAW-данные, <b>-B</b> включает вычитание уровня
        черного из данных, <b>-M</b> добавляет маскированную рамку к результирующему изображению.
        </li>
      <li><b>4channnels</b> - сохраняет RAW-файл в виде 4 отдельных 16-битных grayscale TIFF-файлов (поканально).<br/>
        Ключи командной строки:
        <ul>
          <li><b>-s N</b> выбрать N-е изображение (для файлов с несколькими изображениями)</li>
          <li><b>-g</b> выводить гамма-корректированное (2.2) изображение</li>
          <li><b>-A</b> автомасштабирование значений в целое число раз</li>
          <li><b>-B</b> отключить вычитание уровня черного</li>
          <li><b>-N</b> отключить тоновую кривую для RAW</li>
        </ul>
      </li>
      <li><b>multirender_test</b> - простой пример, показывающий возможность множественной постобработки с 
        разными параметрами без переоткрытия файла.
      </li>
    </ul>

    <h2>Пример simple_dcraw</h2>
    <p>Ниже рассмотрен пример samples/simple_dcraw.cpp - эмулирующий поведение <b>dcraw [-D] [-e][-v][-t]</b>. Для
      экономии места представим, что всегда заданы ключи -t -v (чтобы не комментировать разбор командной строки)
      и что параметр (имя файла) всегда один и всегда передается.
    </p>
<pre>
int main(int ac, char *av[])
{
    int  i, ret, verbose=0, output_thumbs=0;
    char outfn[1024],thumbfn[1024]; 

    // Создадим объект - обработчик изображений.
    LibRaw RawProcessor;
    
    // В TIFF пишется дата в локальном формате, для совместимости с dcraw поставим таймзону
    putenv ((char*)"TZ=UTC"); 

// Определим переменные для удобного доступа к полям RawProcessor
#define P1  RawProcessor.imgdata.idata
#define S   RawProcessor.imgdata.sizes
#define C   RawProcessor.imgdata.color
#define T   RawProcessor.imgdata.thumbnail
#define P2  RawProcessor.imgdata.other
#define OUT RawProcessor.imgdata.params

    OUT.output_tiff = 1; // Выводить будем TIFF

   // Откроем файл
   if( (ret = RawProcessor.open_file(av[1])) != LIBRAW_SUCCESS)
      {
          fprintf(stderr,"Cannot open %s: %s\n",av[i],libraw_strerror(ret));

          // recycle() нужен только если мы хотим освободить ресурсы прямо сейчас.
          // Если мы обрабатываем файлы в цикле, то следующий open_file() 
          // тоже вызовет recycle. Если случилась фатальная ошибка, то recycle()
          // уже вызван (вреда от повторного вызова тоже нет)

          RawProcessor.recycle(); 
          goto end;
      }

   // Распакуем изображение
   if( (ret = RawProcessor.unpack() ) != LIBRAW_SUCCESS)
      {
          fprintf(stderr,"Cannot unpack_thumb %s: %s\n",av[i],libraw_strerror(ret));

          if(LIBRAW_FATAL_ERROR(ret))
                    goto end;
          // для нефатальной ошибки - пробуем продолжить
      }
  // Распакуем thumbnail
  if( (ret = RawProcessor.unpack_thumb() ) != LIBRAW_SUCCESS)
     {
          // обработка ошибки полностью аналогична предыдущему случаю
           fprintf(stderr,"Cannot unpack_thumb %s: %s\n",av[i],libraw_strerror(ret));
           if(LIBRAW_FATAL_ERROR(ret))
                   goto end; 
    }
  else // Успешно распаковали thumbnail, запишем его в файл
    {
      snprintf(thumbfn,sizeof(thumbfn),"%s.%s",av[i],T.tformat == LIBRAW_THUMBNAIL_JPEG ? "thumb.jpg" : "thumb.ppm");
      if( LIBRAW_SUCCESS != (ret = RawProcessor.dcraw_thumb_writer(thumbfn)))
        {
                fprintf(stderr,"Cannot write %s: %s\n",thumbfn,libraw_strerror(ret));

                // в случае фатальной ошибки мы должны заканчивать обработку текущего файла
                if(LIBRAW_FATAL_ERROR(ret))
                          goto end; 
        }
    }
   // Распаковка данных
   if(OUT.document_mode)
           ret = RawProcessor.dcraw_document_mode_processing();
   else
           ret = RawProcessor.dcraw_process();

    if(LIBRAW_SUCCESS != ret ) // ошибка на предыдущем шаге
          {
               fprintf(stderr,"Cannot do postprocessing on %s: %s\n",av[i],libraw_strerror(ret));
               if(LIBRAW_FATAL_ERROR(ret))
                        goto end;
          }
   else  // Успешная обработка документа
     {
        snprintf(outfn,sizeof(outfn),"%s.%s", av[i], "tiff");
        if( LIBRAW_SUCCESS != (ret = RawProcessor.dcraw_ppm_tiff_writer(outfn)))
                fprintf(stderr,"Cannot write %s: error %d\n",outfn,ret);
     }

  // Не делаем recycle, не зовем деструктор, C++ все делает за нас.
  return 0;
end:
  // сюда попали после ошибки
  return 1;
}
</pre>

    <a href=index-rus.html>[вернуться к оглавлению]</a>
    <hr>
    <address><a href="mailto:info@libraw.org">LibRaw Team</a></address>
<!-- Created: Sun Mar 16 12:19:36 MSK 2008 -->
<!-- hhmts start -->
Last modified: Mon Jul 11 20:23:33 MSD 2011
<!-- hhmts end -->
  </body>
</html>