002
05.04.2003, 14:53 Uhr
~Heiko
Gast
|
Die bilder im rawformat zu speichern ist nicht weiter schwer du musst nur mal bei google nach den Dateiformaten suchen. Da findest du dann auch die Header. In den Header guckst du einfach wo der pointer ist der die addresse des ersten Datenbytes anzeigt. (also da wo der header zu ende ist.);
dann öffnest du die datei und liest ersteinmal ein wo du hinspringen musst. Wenn du das weisst lässt du den FILE-Pointe wieder auf den anfangen zeigen um ihn dananach um die anzahl an bytes weiterspringen die du vorher aus dem Header entnommen hast. Dann einfach nur noch mit fputc abspeichern. Die Infos wie viele Bytes die Datei enthält steht meist auch am anfang des Headers. (also auch leicht auszulesen. fertig. Ich habe dir den Quellcode den ich irgendwann mal für bmp verwendet habe angefügt:
typedef struct {unsigned char byte0,byte1,byte2,byte3;} FOUR_BYTE;
typedef struct {unsigned char byte0,byte1;} TWO_BYTE;
typedef struct { TWO_BYTE magic_nr; FOUR_BYTE file_length; FOUR_BYTE reserved_area; FOUR_BYTE data_pointer; } BMP_FILE_HEADER;
typedef struct { FOUR_BYTE format_header_length; FOUR_BYTE picture_width; FOUR_BYTE picture_height; TWO_BYTE planes_count; TWO_BYTE bits_per_pixel; FOUR_BYTE compression; FOUR_BYTE imagesize; FOUR_BYTE x_pixel_per_meter; FOUR_BYTE y_pixel_per_meter; FOUR_BYTE amount_used_colors; FOUR_BYTE amount_important_colors; } BMP_FORMAT_HEADER;
typedef struct { BMP_FILE_HEADER file_header; BMP_FORMAT_HEADER format_header; } BMP_HEADER;
BMP_HEADER read_bmpHeader(char* filename){ FILE *fp; BMP_HEADER header;
fp=fopen(filename,"rb");
header.file_header.magic_nr.byte0 = fgetc(fp); header.file_header.magic_nr.byte1 = fgetc(fp);
header.file_header.file_length.byte0 = fgetc(fp); header.file_header.file_length.byte1 = fgetc(fp); header.file_header.file_length.byte2 = fgetc(fp); header.file_header.file_length.byte3 = fgetc(fp);
header.file_header.reserved_area.byte0= fgetc(fp); header.file_header.reserved_area.byte1= fgetc(fp); header.file_header.reserved_area.byte2= fgetc(fp); header.file_header.reserved_area.byte3= fgetc(fp);
header.file_header.data_pointer.byte0 = fgetc(fp); header.file_header.data_pointer.byte1 = fgetc(fp); header.file_header.data_pointer.byte2 = fgetc(fp); header.file_header.data_pointer.byte3 = fgetc(fp);
header.format_header.format_header_length.byte0 = fgetc(fp); header.format_header.format_header_length.byte1 = fgetc(fp); header.format_header.format_header_length.byte2 = fgetc(fp); header.format_header.format_header_length.byte3 = fgetc(fp);
header.format_header.picture_width.byte0 = fgetc(fp); header.format_header.picture_width.byte1 = fgetc(fp); header.format_header.picture_width.byte2 = fgetc(fp); header.format_header.picture_width.byte3 = fgetc(fp);
header.format_header.picture_height.byte0 = fgetc(fp); header.format_header.picture_height.byte1 = fgetc(fp); header.format_header.picture_height.byte2 = fgetc(fp); header.format_header.picture_height.byte3 = fgetc(fp);
header.format_header.planes_count.byte0 = fgetc(fp); header.format_header.planes_count.byte1 = fgetc(fp);
header.format_header.bits_per_pixel.byte0 = fgetc(fp); header.format_header.bits_per_pixel.byte1 = fgetc(fp);
header.format_header.compression.byte0 = fgetc(fp); header.format_header.compression.byte1 = fgetc(fp); header.format_header.compression.byte2 = fgetc(fp); header.format_header.compression.byte3 = fgetc(fp);
header.format_header.imagesize.byte0 = fgetc(fp); header.format_header.imagesize.byte1 = fgetc(fp); header.format_header.imagesize.byte2 = fgetc(fp); header.format_header.imagesize.byte3 = fgetc(fp);
header.format_header.x_pixel_per_meter.byte0 = fgetc(fp); header.format_header.x_pixel_per_meter.byte1 = fgetc(fp); header.format_header.x_pixel_per_meter.byte2 = fgetc(fp); header.format_header.x_pixel_per_meter.byte3 = fgetc(fp);
header.format_header.y_pixel_per_meter.byte0 = fgetc(fp); header.format_header.y_pixel_per_meter.byte1 = fgetc(fp); header.format_header.y_pixel_per_meter.byte2 = fgetc(fp); header.format_header.y_pixel_per_meter.byte3 = fgetc(fp);
header.format_header.amount_used_colors.byte0 = fgetc(fp); header.format_header.amount_used_colors.byte1 = fgetc(fp); header.format_header.amount_used_colors.byte2 = fgetc(fp); header.format_header.amount_used_colors.byte3 = fgetc(fp);
header.format_header.amount_important_colors.byte0 = fgetc(fp); header.format_header.amount_important_colors.byte1 = fgetc(fp); header.format_header.amount_important_colors.byte2 = fgetc(fp); header.format_header.amount_important_colors.byte3 = fgetc(fp);
fclose(fp);
return header; }
void bmp2raw(char* bmp_filename,char* raw_filename){ FILE *fp, *fp2; BMP_HEADER header; int xdim,ydim,i,j;
header=read_bmpHeader(bmp_filename);
xdim= header.format_header.picture_width.byte0 + header.format_header.picture_width.byte1 * 256 + header.format_header.picture_width.byte2 * 256*256 + header.format_header.picture_width.byte3 * 256*256*256; ydim= header.format_header.picture_height.byte0 + header.format_header.picture_height.byte1 * 256 + header.format_header.picture_height.byte2 * 256*256 + header.format_header.picture_height.byte3 * 256*256*256;
j = header.file_header.data_pointer.byte0 + header.file_header.data_pointer.byte1 *256 + header.file_header.data_pointer.byte2 *256*256 + header.file_header.data_pointer.byte3 *256*256*256;
fp=fopen(bmp_filename,"rb");
for(i=0;i<j;i++){fgetc(fp);}
fp2=fopen(raw_filename,"wb");
for(j=ydim-1;j>=0;j--){ for(i=0;i<xdim;i++){ fputc(fgetc(fp),fp2); } }
fclose(fp2); fclose(fp);
}
hoffe das hilft, analog zu den anderen dateiformaten |