# включить изображение в ANSI C - PullRequest
1 голос
/ 07 февраля 2012

Я пишу программу, которая создает файл изображения. Я хочу, чтобы "исходное" изображение было жестко запрограммировано в двоичном файле программы.

Я думал ...

char image[] = {
#include"image.jpg"
}

Но мне нужно каким-то образом преобразовать изображение в формат, который можно # включить в файл c в виде массива символов?

Ответы [ 3 ]

7 голосов
/ 07 февраля 2012

Хорошо, используйте инструмент unix xxd , чтобы создать импорт массива c char для данного двоичного файла, например:

$ xxd -i imgfile.dat > imgfile.h

Это должно привести к выводу типа:

unsigned char imgfile[] = {
  0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x0a
};
unsigned int imgfile_len = 12;

См. Также: "# include" текстовый файл в программе на C в виде символа []

3 голосов
/ 07 февраля 2012

Вы могли бы написать небольшую программу, которая принимает файл jpg в качестве входных данных и выводит инициализатор Си. Затем #include этот файл.

#include <stdio.h>
int main(int argc, char **argv)
{
    int ch;
    int count = 0;
    printf("static const char array[] = {\n");
    while ((ch = getchar()) != -1) {
       printf("0x%02X, ", ch);
       ++count;
       if ((count % 16) == 0)
           printf("\n");
   }
   printf("\n};\n#define ARRAY_SIZE %d\n", count);
}

Скомпилируйте файл (назовите его initialzer.c или что-то в этом роде) и выполните:

./initializer <pic.jpg >jpeg.h

Если хотите, можете придумать и настроить имя массива.

0 голосов
/ 07 февраля 2012
  • Открыть файл изображения в режиме двоичного чтения
  • Определить размер файла
  • Выделите память для ее хранения
  • Считать файл в память, используя fread

Запишите все это в файл .h и # include этот файл в своем коде.

...