LINUX.ORG.RU
Ответ на: комментарий от wfrr

Скачал ейное руководство, так там открытие изображения на десяток страниц размазано, не меньше.

Можно, конечно, тупо накопипастить, но по-хорошему придётся копаться во всём этом. Для задачи - совершенно лишние усилия.

Может с bmp проще выйдет?

anonymous
()
Ответ на: комментарий от anonymous

Либа юзается весьма просто, просто там много того что вам
 не потребуется наверняка.

Вот минимальный пример на си:

//check header
        void * pngHeader = malloc(PNG_HEADER_LEN);
        fread(pngHeader, 1, PNG_HEADER_LEN, srcFile);
        int isPng = png_sig_cmp(pngHeader, 0, PNG_HEADER_LEN);
        if ( isPng != 0 )
                failure("Png header check fail. Source file isn`t png.");
        free(pngHeader);

        //init some png structures
        png_structp pngStruct = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0,
                pngOnError, pngOnWarning);
        if(!pngStruct)
                failure("Cann`t initialize pngStruct.");

        png_infop pngInfo = png_create_info_struct(pngStruct);
        if (!pngInfo)
        {
                png_destroy_read_struct(&pngStruct, (png_infopp)NULL, (png_infopp)NULL);
                failure("Cann`t initialize pngInfo.");
        }
        /*
        png_infop pngEnd = png_create_info_struct(pngStruct);
        if (!pngEnd)
        {
                png_destroy_read_struct(&pngStruct, &pngInfo, (png_infopp)NULL);
                failure("Cann`t initialize pngEnd.");
        }*/

        //init io with file
        png_set_sig_bytes(pngStruct, PNG_HEADER_LEN);
        png_init_io(pngStruct, srcFile);

        png_read_info(pngStruct, pngInfo);

        //if(pngInfo.interlace_type != PNG_INTERLACE_NONE)
        //      failure("Images with interlacing not supported.");

        if(pngInfo->bit_depth == 16)
                png_set_strip_16(pngStruct);

        if(pngInfo->bit_depth < 8)
                png_set_packing(pngStruct);

        if(pngInfo->color_type & PNG_COLOR_MASK_ALPHA)
                png_set_strip_alpha(pngStruct);

        png_read_update_info(pngStruct, pngInfo);
        //reading
        int imgHeight = pngInfo->height;
        int imgWidth = pngInfo->width;
        fprintf(dstFile, "%i %i\n", imgHeight, imgWidth);

        png_bytep pngRow = png_malloc(pngStruct, pngInfo->rowbytes);
        for(int curRow = 0; curRow < imgHeight; curRow++)
        {
                png_read_row(pngStruct, pngRow, NULL);
                fwrite(pngRow, pngInfo->rowbytes, 1, dstFile);
        }
        png_free(pngStruct, pngRow);
        //fclose(dstFile);
        png_read_end(pngStruct, NULL);
        png_destroy_read_struct(&pngStruct, &pngInfo, NULL);

wfrr ★★☆
()
Ответ на: комментарий от tailgunner

>PIL?

Вот эта вроде нормальная.

anonymous
()
Ответ на: комментарий от wfrr

если под PIL сишная либа то шустрее не будет. ну разве что самую малость ибо основное время будет работать эта либа.

anonymous
()
Ответ на: комментарий от anonymous

Да никто никуда работать не будет. Скорость мне вообще не нужна.

anonymous
()

PythonMagick от ImageMagick попробуй.

anonymous
()

Еще есть gdmodule

anonymous
()

Есть еще Qt :-)

smh ★★★
()
Ответ на: комментарий от andreyu

+1

Одно из преимуществ - может считывать изображение не только с диска, но и из памяти.

alex_custov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.