я есть код ниже:
FILE *inFile;
BmpHeader header;
BmpImageInfo info;
Rgb *palette;
int i = 0;
inFile = fopen("red.bmp", "rb");
fread(&header, 1, sizeof(BmpHeader), inFile);
fread(&info, 1, sizeof(BmpImageInfo), inFile);
palette = (Rgb*)malloc(sizeof(Rgb) * info.numColors);
fread(palette, sizeof(Rgb), info.numColors, inFile);
unsigned char buffer[info.width*info.height];
FILE *outFile = fopen("red.a", "wb");
Rgb *pixel = (Rgb*) malloc(sizeof(Rgb));
int read, j;
for(j=info.height; j>0; j--)
{
for(i=0; i<info.width; i++)
{
fread(pixel, 1, sizeof(Rgb), inFile);
buffer[i] = ARGB16(0, pixel->red, pixel->green, pixel->blue);
}
}
fwrite(buffer, 1, sizeof(buffer), outFile);
и я чтение красное изображение (255 0 0), а я с помощью функции, определенной вами выше (#define ARGB16 (а, г, г , b) (((a) < < 15) | (r >> 3) | ((g >> 3) < < 5) | ((b >> 3) < < 10)) ), но выход файл показывает мне: 1F 1F 1F, когда я открываю файл с hexaeditor вместо 7C00.
Как вы используете макрос? – pierrotlefou
В документации на http://www.devkitpro.org/libnds/a00106.html указано, что должны использоваться только 5-битные значения цвета. Утрируйте 8-битные значения (x >> 3) перед использованием макроса. Также используйте только 1 или 0 как альфа-значение (1 бит). –