Вероятно я где напутал при рассмотрении кучки условий в функции void render(ddjvu_page_t *page, int pageno) из файла ddjvu.cpp, ибо я пытался выделить из всего этого нагромождения только то что касалось сохранения в тифф.
ddjvu_page_render() возвращает false
Код: Выделить всё
void my_func(int pageno, ddjvu_pageinfo_t *info, ddjvu_document_t *m_djvu_document){
ddjvu_rect_t prect;
ddjvu_rect_t rrect;
ddjvu_format_t *fmt;
ddjvu_format_style_t style;
char *image = 0;
int rowsize;
int iw = info->width;
int ih = info->height;
int dpi = info->dpi;
ddjvu_page_t *page;
if (! (page = ddjvu_page_create_by_pageno(m_djvu_document, pageno-1))) return;
ddjvu_page_type_t type = ddjvu_page_get_type(page);
/* Process size specification */
prect.x = 0;
prect.y = 0;
prect.w = iw;
prect.h = ih;
/* Process aspect ratio */
double dw = (double)iw / prect.w;
double dh = (double)ih / prect.h;
if (dw > dh)
prect.h = (int)(ih / dw);
else
prect.w = (int)(iw / dh);
/* Process segment specification */
rrect = prect;
style=DDJVU_FORMAT_RGB24;
if((type==DDJVU_PAGETYPE_BITONAL))
{
style = DDJVU_FORMAT_GREY8;
if ((int)prect.w == iw && (int)prect.h == ih)
style = DDJVU_FORMAT_MSBTOLSB;
}
if (! (fmt = ddjvu_format_create(style, 0, 0))) return;
ddjvu_format_set_row_order(fmt, 1);
/* Allocate buffer */
rowsize = rrect.w * 3;
if (! (image = (char*)malloc(rowsize * rrect.h))) return;
/* Render */
if (! ddjvu_page_render(page, DDJVU_RENDER_COLOR, &prect, &rrect, fmt, rowsize, image))
QMessageBox::warning(this, trUtf8("ddjvu_page_render return false"), QString::number(pageno));
// memset(image, 0xFF, rowsize * rrect.h);
}