Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Ich würde gern..

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.03.2003, 15:43 Uhr
~Martin
Gast


Ich würde gern ein Bild, welches im .bmp, .pcx oder .pbm vorliegt als .raw abspeichern und und in VGA 640x480 wieder ausgeben.
Mit Borland C++ 4.5 unter DOS muß das ganze sein.
Ich habe keine Ahnung wie man an sowas rangeht. Hab mich auch schon totgesucht im Internet.

Für Vorschläge wäre ich sehr dankbar.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.03.2003, 02:33 Uhr
Hans
Library Walker
(Operator)


Hi,

dazu brauchst Du entweder Zusatzbibliotheken, die Dir die ganze Arbeit die mit dem codieren der einzelnen Dateiformate verbunden ist, abnehmen. Oder Du beschäftigst Dich noch mit dem Aufbau der Dateiformate, und schreibst Dir die entsprechenden Routinen selber.
Ich würde aber im Web mal suchen, da gibt es nämlich schon irgendwo fertige Bibliotheken dafür. Als Suchbegriffe wären "Dateiformate, (programmier-) bibliotheken" und natürlich die Namen der Formate selbst geeignet. Ach ja, die Namen bekannter Officepakete, Bildbearbeitungs- und Betrachtungsprogramme sollte man bei der Suche aussschliessen.

Hans

P.S. Falls Du Dich mit den Dateiformaten näher befassen willst, sieh Dir mal dieses Buch an:
Dateiformate - Die Referenz -
von Günter Born
Galileo Press
ISBN: 3934358837
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: