Thema: Bitmaps in C
Einzelnen Beitrag anzeigen
Alt 06.01.2003, 04:25   #1 (permalink)
Gast
Gast
 

Registriert seit: 22.01.2002
Beiträge: 20.356

Gast befindet sich auf einem aufstrebenden Ast

Standard Bitmaps in C

sososo...
Ich hab gehört dass hier n paar gosu programmierer sind, und da will ich mein glück mal hier versuchen

also ich will ne bitmap einlesen und die kontraste verstärken (alle heller wie 127 auf 0 setzen und alle dünkler 127 auf 255)
der code ist wie folgt:

Code:
#include "stdafx.h" 
#include "stdio.h" 
#include "stdlib.h" 



int main(int argc, char* argv[]) 
{ 


struct bmpformat 
{ 
unsigned short Identifier; 
unsigned long FileSize; 
unsigned long Reserved; 
unsigned long Bitmap_Data_Offset; 
unsigned long Bitmap_Header_Size; 
unsigned long Width; 
unsigned long Height; 
unsigned short Planes; 
unsigned short Bits_per_Pixel; 
long Compression; 
unsigned long Bitmap_Data_Size; 
unsigned long HResolution; 
unsigned long VResolution; 
unsigned long Colors[256]; 
unsigned long ImportantColors; 
unsigned long Palette; 
unsigned char Data[1000000]; 
}; 

struct bmpformat bitmap; 



FILE *lesen; 


lesen=fopen("C:\\bild2.bmp", "r"); 

char tmp = fgetc(lesen); 
char tmp2 = fgetc(lesen); 

bitmap.Identifier=(((unsigned short)tmp2)<<8|tmp); 

char *ptr=(char*)&bitmap.Identifier; 
printf("\n Identifier=%c%c", *ptr, *(ptr+1)); 


fread(&bitmap.FileSize, sizeof(bitmap.FileSize), 1, lesen); 
fread(&bitmap.Reserved, sizeof(bitmap.Reserved), 1, lesen); 
fread(&bitmap.Bitmap_Data_Offset, sizeof(bitmap.Bitmap_Data_Offset), 1, lesen); 
fread(&bitmap.Bitmap_Header_Size, sizeof(bitmap.Bitmap_Header_Size), 1, lesen); 
fread(&bitmap.Width, sizeof(bitmap.Width), 1, lesen); 
fread(&bitmap.Height, sizeof(bitmap.Height), 1, lesen); 
fread(&bitmap.Planes, sizeof(bitmap.Planes), 1, lesen); 
fread(&bitmap.Bits_per_Pixel, sizeof(bitmap.Bits_per_Pixel), 1, lesen); 
fread(&bitmap.Compression, sizeof(bitmap.Compression), 1, lesen); 
fread(&bitmap.Bitmap_Data_Size, sizeof(bitmap.Bitmap_Data_Size), 1, lesen); 
fread(&bitmap.HResolution, sizeof(bitmap.HResolution), 1, lesen); 
fread(&bitmap.VResolution, sizeof(bitmap.VResolution), 1, lesen); 
fread(&bitmap.Colors, sizeof(bitmap.Colors), 1, lesen); 
fread(&bitmap.ImportantColors, sizeof(bitmap.ImportantColors), 1, lesen); 
fread(&bitmap.Palette, sizeof(bitmap.Palette), 1, lesen); 
fread(&bitmap.Data, sizeof(bitmap.Data), 1, lesen); 


for(unsigned int a=0; a<bitmap.Bitmap_Data_Size; a++) 
{ 

if(bitmap.Data[a]>=127) 
{ 
bitmap.Data[a]=255; 
} 
if(bitmap.Data[a]<127) 
{ 
bitmap.Data[a]=0; 
} 

} 


fclose(lesen); 

FILE *schreiben; 

schreiben=fopen("C:\\bild.bmp", "w+"); 

fwrite(&bitmap.Identifier,sizeof(bitmap.Identifier), 1, schreiben); 
fwrite(&bitmap.FileSize, sizeof(bitmap.FileSize),1,schreiben); 
fwrite(&bitmap.Reserved,sizeof(bitmap.Reserved), 1, schreiben); 
fwrite(&bitmap.Bitmap_Data_Offset, sizeof(bitmap.Bitmap_Data_Offset),1,schreiben); 
fwrite(&bitmap.Bitmap_Header_Size,sizeof(bitmap.Bitmap_Header_Size), 1, schreiben); 
fwrite(&bitmap.Width, sizeof(bitmap.Width),1,schreiben); 
fwrite(&bitmap.Height,sizeof(bitmap.Height), 1, schreiben); 
fwrite(&bitmap.Planes, sizeof(bitmap.Planes),1,schreiben); 
fwrite(&bitmap.Bits_per_Pixel,sizeof(bitmap.Bits_per_Pixel), 1, schreiben); 
fwrite(&bitmap.Compression, sizeof(bitmap.Compression),1,schreiben); 
fwrite(&bitmap.Bitmap_Data_Size,sizeof(bitmap.Bitmap_Data_Size), 1, schreiben); 
fwrite(&bitmap.HResolution, sizeof(bitmap.HResolution),1,schreiben); 
fwrite(&bitmap.VResolution,sizeof(bitmap.VResolution), 1, schreiben); 
fwrite(&bitmap.Colors, sizeof(bitmap.Colors),1,schreiben); 
fwrite(&bitmap.ImportantColors,sizeof(bitmap.ImportantColors), 1, schreiben); 
fwrite(&bitmap.Palette, sizeof(bitmap.Palette),1,schreiben); 
for(unsigned int u=0; u<bitmap.Bitmap_Data_Size; u++) 
{ 
fprintf(lesen, "%c", bitmap.Data[u]); 
} 
fclose(schreiben); 

return 0; 
}
das problem ist, dass das programm immer nur das erste bit von bitmap.Data einliest und so oft dupliziert wie es die schleife wiederholt...

daraus folgt wenn das erste bit >127 ist wird das bild schwarz, wenn es <127 ist wird das bild komplett weiss

ich hab keinen plan wo mein fehler da liegen könnte...

würd mich wirklich freuen wenn ihr mir nen anstoss geben könntet was da faul ist

thx schonmal im voraus für eure verbrauchten grauen zellen

so far
Sting
Gast ist offline   Mit Zitat antworten