Gast
Registriert seit: 22.01.2002
Beiträge: 20.356
| 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 |