Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: bmp в массив
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Hermes
нужна программка которая преобразует картинку в масси вида:
0x00ffffff, 0x00ffffff, 0x0012ffcc и т.д.
т.е. преобразовать 24 битную картинку в hex формат, где на пиксель приходиться 32 бита, из которых значащих только 24
evgen2
Цитата(Hermes @ Dec 13 2008, 17:27) *
нужна программка которая преобразует картинку в масси вида:
0x00ffffff, 0x00ffffff, 0x0012ffcc и т.д.
т.е. преобразовать 24 битную картинку в hex формат, где на пиксель приходиться 32 бита, из которых значащих только 24

GDlib вам должна помочь http://www.boutell.com/gd/ или http://www.libgd.org
aaarrr
Цитата(evgen2 @ Dec 13 2008, 18:40) *
GDlib вам должна помочь

ИМХО, в таком случае гораздо проще помочь себе самостоятельно - написание маленькой консольной программки не займет больше 20 минут.
Hermes
вот в том и дело что не знаю как написать эту программку за 20 минут sad.gif
есть ли готовое решение ?
Hermes
уже не надо... сделал сам... отлично подходит для LPC-2478STK от олимекс biggrin.gif
и ни с кем делиться не буду lol.gif
а прога-то универсальная! =)

ЗЫ: тему можно закрыть
ЗЫЫ: если кому надо - пишите в личку
aaarrr
Цитата(Hermes @ Dec 14 2008, 16:54) *
и ни с кем делиться не буду :lol:
а прога-то универсальная! =)

Это, конечно, очень правильная позиция. Попробуйте кому-нибудь продать.

CODE

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

typedef unsigned char u_char;
typedef unsigned short int u_short;
typedef unsigned int u_int;

#pragma pack(1)
struct
{
char bfType[2];
u_int bfSize;
u_short bfReserved1;
u_short bfReserved2;
u_int bfOffBits;

u_int biSize;
u_int biWidth;
u_int biHeight;
u_short biPlanes;
u_short biBitCount;
u_int biCompression;
} bmp_header;

u_char *line_buffer;


int main(int argc, char *argv[])
{
char *s;
FILE *infile, *outfile;
int res = EXIT_SUCCESS;

if(argc != 3)
{
printf("Usage: bmp2hex infile outfile\n");
return EXIT_FAILURE;
}
if((s = argv[1], (infile = fopen(s, "rb")) == NULL) ||
(s = argv[2], (outfile = fopen(s, "wb")) == NULL))
{
printf("??? %s\n", s);
return EXIT_FAILURE;
}

if(fread((char*)&bmp_header, 1, sizeof(bmp_header), infile) == sizeof(bmp_header))
{
if((bmp_header.bfType[0] == 'B') && (bmp_header.bfType[1] == 'M') &&
(bmp_header.biCompression == 0) && (bmp_header.biBitCount == 24))
{
u_int rx, ry, stride, dcount = 0;
char hex_buff[16];
u_char *img;

stride = bmp_header.biWidth * 3 + (((bmp_header.biWidth * 3 - 1) ^ 3) & 3);
if((line_buffer = malloc(stride)) != NULL)
{
fseek(infile, bmp_header.bfOffBits, SEEK_SET);

for(ry = 0; ry < bmp_header.biHeight; ry++)
{
fread(line_buffer, 1, stride, infile);
img = line_buffer;
for(rx = 0; rx < bmp_header.biWidth; rx++)
{
u_char r, g, b;

r = img[2];
g = img[1];
b = img[0];
snprintf(hex_buff, sizeof(hex_buff), "0x%08x, ", (r << 16) | (g << 8) | b);
fwrite(hex_buff, 1, strlen(hex_buff), outfile);
if(++dcount == 8)
{
dcount = 0;

hex_buff[0] = 0x0d;
hex_buff[1] = 0x0a;
fwrite(hex_buff, 1, 2, outfile);
}
img += 3;
}
}
}
else
{
printf("Memory allocation failed!\n");
res = EXIT_FAILURE;
}
}
else
{
printf("Input file format error!\n");
res = EXIT_FAILURE;
}
}
fclose(infile);
fclose(outfile);
return res;
}


Нажмите для просмотра прикрепленного файла
starterkit
В добавок, с помощью MatLab можно преобразовать почти из любого формата (не только графику но и звук) в любой требуемый массив и сохранить в виде файла скриптом в десяток строк.
aaarrr
Цитата(starterkit @ Dec 14 2008, 17:42) *
В добавок, с помощью MatLab можно преобразовать почти из любого формата (не только графику но и звук) в любой требуемый массив и сохранить в виде файла скриптом в десяток строк.

Оно, конечно, верно, только калибр орудия несколько великоват smile.gif Хотя и сам так делал, грешен.
Diz
Python + PIL (Python Imaging Library) ?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.