000
18.06.2008, 01:01 Uhr
~siddy
Gast
|
ich hab ein problem... und zwar bin ich grad eine aufgabe zu machen für die uni und komme nicht weiter.
Aufgabenstellung ist :
Zitat: |
Es soll eine Anwendung erstellt werden, die eine Bilddatei einlesen, auswerten, verändern und speichern kann.....blablabla
blablabla... Die Datei enthält ein grünes und ein rotes Rechteck, die sich nicht überlappen. Bestimmen Sie die Größe und die Position dieser Rechtecke... blablabla
|
es ist eine bmp datei grösse ist 640x480 pixel gross... und mein problem ist, ich weiss nicht wie ich die rechtecke finde und deren grösse bestimme ok es wäre ziemlich einfach wenn ich einfach nur die farben analysiere aber sinn des programms ist es rechtecke zu finden nicht kreise oder sonst was auch wenn keine kreise vorhanden sind...
C++: |
BYTE bild[bih.biHeight][bih.biWidth];
|
ungefähres beispiel vom inhalt des bild arrays ->
000000000000000000000000000 000055555000000000000000000 000055555000000000000000000 000055555000000000000000000 000000000000000000000000000 000000000333333333000000000 000000000333333333000000000 000000000333333333000000000 000000000000000000000000000
mein bisheriger code ->
Code: |
#include <stdio.h>
typedef char CHAR; typedef short SHORT; typedef long LONG; typedef unsigned long DWORD; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD;
typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } __attribute__((__packed__)) BITMAPFILEHEADER, *PBITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } __attribute__((__packed__)) BITMAPINFOHEADER, *PBITMAPINFOHEADER;
typedef struct tagRGBQUAD { // 8 bit unsigned char rgbBlue; unsigned char rgbGreen; unsigned char rgbRed; unsigned char rgbReserved;
} __attribute__((__packed__)) RGBQUAD;
typedef struct tagRGBTRIPLE { // 24 bit unsigned char rgbtBlue; unsigned char rgbtGreen; unsigned char rgbtRed; } RGBTRIPLE;
int main( void ){
int y = 0; int x=0;
FILE* f; int rc; BITMAPFILEHEADER bfh; BITMAPINFOHEADER bih;
/*********** FILEOPEN & FILEREAD ************/ printf("lese Bildinformationen...\n"); f = fopen( "C:\\Unbenannt.bmp", "r" ); if( f == 0 ){ perror( "fopen" ); return 1; }
rc = fread( &bfh, 1, sizeof(BITMAPFILEHEADER), f ); if( rc != sizeof(BITMAPFILEHEADER) ){ perror( "fread bfh" ); fclose(f); return 1; }
rc = fread( &bih, 1, sizeof(BITMAPINFOHEADER), f ); if( rc != sizeof(BITMAPINFOHEADER) ){ perror( "fread bih" ); fclose(f); return 1; } /*********** Bildbearbeitung ************/ BYTE bild[bih.biHeight][bih.biWidth]; printf("Bilddimesion in Pixeln -> y: %d, x: %d\n", bih.biHeight, bih.biWidth); printf("Compression : %d\n",bih.biCompression); // kompression an / aus ? ausg printf("bfType : 0x%x\n",bfh.bfType); // BF Type ausgabe /*lese daten aus der bilddatei ins array ein*/ printf("lese daten aus der bilddatei ins array ein..."); if (bih.biCompression == 0) { for (y = 0; y < bih.biHeight; y++) { rc = fread( &bild[bih.biHeight-y-1], 1, bih.biWidth, f); if (rc != bih.biWidth) { perror("fread bild"); fclose(f); return 1; } } } printf("einlesen fertig\n"); /*ende einlesen... */ /*rechtecke identifizieren*/ printf("rechtecke bestimmen...\n");
/*********** Bildbearbeitung ende ************/ /*********** FILEWRITE ************/ /**/
rc = fwrite( &bfh, 1, sizeof(BITMAPFILEHEADER), f); if (rc != sizeof(BITMAPFILEHEADER)) { perror("fwrite bitmap file header"); fclose(f); return 1; }
rc = fwrite( &bih, 1, sizeof(BITMAPINFOHEADER), f); if (rc != sizeof(BITMAPINFOHEADER)) { perror("fwrite bitmap info header"); fclose(f); return 1; } /****************************************/ fclose(f);
return 0; }
|
wie könnte man denn da weitermachen ?? |