Практически я не понимаю использование блока sBIT в PNG-файле.Какова цель блока sBIT в PNG-файле?
Я хранение PNG файлов из 11 бит/канал источника RGB, поэтому я послушно установить кусок SBIT в моем (с) Кодом:
...
png_color_8 sig_bit;
sig_bit.gray = 0;
sig_bit.alpha = 0;
sig_bit.red = 11;
sig_bit.green = 11;
sig_bit.blue = 11;
png_set_sBIT(png_ptr, info_ptr, &sig_bit);
...
/* save the png */
Когда изображения просматриваются просмотрщик окон (родной Vista viewer/Paint.net), нижние 8 бит усекаются, поэтому я могу видеть только верхние 3 бита. Я бы подумал, что кусок sBIT
будет автоматически инструктировать читателей, чтобы сдвинуть пиксели на 5 бит до MSB, чтобы оправдать данные для отображения. Кажется, не так.
Когда я открываю файлы PNG в моем коде, которые либо имеют или не имеют кусок SBIT, и сделать следующее:
png_color_8p sig_bit;
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT)) {
png_get_sBIT(png_ptr, info_ptr, &sig_bit);
png_set_shift(png_ptr, sig_bit);
}
Данные пикселей одинаковы.
Какая используемая модель блока sBIT? Могу ли я каким-то образом использовать блок sBIT
для MSB, чтобы оправдать данные пикселя для просмотра, но увидеть «оригинальные» данные для численного анализа?
Какова глубина бит, указанная в куске IHDR? [sBIT не допускается превышать это значение] (http://www.w3.org/TR/PNG/#11sBIT); если вы не используете бит глубиной 16, возможно, это не так, как вы планировали. –
@MichaelMadsen 16: Я IHDR с png_set_IHDR (img-> p, img-> i, width, height, 16, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); ' – Jamie
@MichaelMadsen На основании ссылки, которую вы опубликовали, я 'm заставляло удивляться: есть ли кусок 'sBIT' только средство для предоставления маской? – Jamie