Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

25.05.2007, 22:18

C/C++ Daten aus Bitmap auslesen

hallo leute,

ich möchte aus einer bitmap mehrere daten auslesen. unter anderem z.b. die größe der datei, die breite, die länge, usw.
bisher habe ich im netz immer nur einen weg über einen "BITMAPINFOHEADER" gefunden. dieser ist allerdings ein bestandteil der "windows.h" und ich nutze ja linux ;)

gibt es eine andere, einfach möglichkeit an die daten heranzukommen?

vielen dank schonmal!

2

25.05.2007, 22:27

guck dir das bitmap format an, das ist relativ einfach, dann liest du eben die daten per fstream (binär) ein, in eigene strukturen für header usw.
dazu such vllt mal HIER.

mfg,
julian

3

25.05.2007, 22:39

ok fstream ist schon mal ein stichwort.
wie das format aufgebaut ist habe ich eigentlich verstanden. wenn ich mir die datei mit dem hex-editor ansehe stehen im oberen teil die daten, sprich format, länge, usw. und dann kommen die bildpixel.

aber das einlesen verstehe ich nicht wirklich

4

26.05.2007, 00:07

ich meine, auf c-plusplus.com/forum sind einige beiträge, wo passender code steht sonst suche eben nach ner bitmap-klasse und schau dir den code an.
http://www.c-plusplus.de/forum/viewtopic…ght-is-bmp.html
das glaub ich sollte dir helfen.

mfg,
julian

5

26.05.2007, 00:38

danke für deine antwort,

ich habe mal versucht die beiden strukturen in mein programm zu übertragen... beim kompilieren bekomme ich diesen fehler:

Quellcode

1
 expected specifier-qualifier-list before »DWORD«

6

26.05.2007, 03:16

DWORD - ist das nicht ein typedef der win-api? ich kann mich irren, aber so hatte ich das im kopf.
dann musst du gucken, was ein dword ist, wie gross, was drin gespeichert wird, und ein passendes pendant unter linux entweder suchen oder selbst basteln.

mfg,
julian

7

26.05.2007, 12:29

stimmt =D

ich hab jetzt einfach mal nur die größe, länge und breite in der struktur gelassen:

Quellcode

1
2
3
4
5
 typedef struct tagBITMAPINFOHEADER {  
    int     biSize;                 // Specifies the number of bytes required by the BITMAPINFOHEADER structure.
    int     biWidth;                // Specifies the width of the bitmap, in pixels.
    int     biHeight;               // Specifies the height of the bitmap, in pixels.
} BITMAPINFOHEADER; 


nun kann ich das ganze kompilieren.
aber was bringt mir das ganze? ich kann jetzt die datei auslesen, aber die breite, länge, etc. steht dadurch ja auch nicht in der struktur ;)

8

26.05.2007, 13:19

wie wärs mit fstream?
du musst schon aus der datei lesen um die daten zu bekommen. :D

ich denke aber, es wäre sicher einfacher, die info- und file-headers komplett zu lesen, da die daten ja an einer bestimmten position in der datei stehen.
dann kannst du aus der struktur eben alle benötigten daten lesen.

mfg,
julian

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »-=Freaky=-« (26.05.2007, 13:19)


9

26.05.2007, 17:30

also so sieht mein progg bisher aus. bissel umfangreicher, als es sein müsste (ich weiß...) aber fürn n4p wie mich besser zu lesen ^^

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>
#include <stdlib.h>

typedef struct tagBITMAPINFOHEADER {  
	int 		biDateigroesse; //Dateigröße in Bytes
   int     	biSize;                 
   int     	biBreite;       //Breite...        
   int     	biHoehe;        //Höhe in Pixeln 
   int	 	biBildpunkte;   //Anzahl Bildpunkte      
} BITMAPINFOHEADER; 

int main()
{
	FILE           *pfDatei;
	int            iX;
	unsigned char  *pucWerte;
	
	int iTEST=0; //Testvariable zum Fuckeln
	BITMAPINFOHEADER IH;
	
	printf ("Bild einlesen und auswerten\n");
	printf ("===========================\n\n");
	
	pfDatei = fopen("bild.bmp","r");
	if (pfDatei == NULL)
	{
		printf ("Datei nicht gefunden!\n");
	}
	
	//Daten aus Bitmap auslesen
	fseek (pfDatei , 0 , SEEK_END);
        IH.biDateigroesse = ftell (pfDatei);
        rewind (pfDatei); 						 
	fclose (pfDatei);   
   
        //Größe des Bildes
        printf ("Groesse: %d Bytes\n", IH.biDateigroesse);

	//Breite einlesen
	pfDatei = fopen("bild.bmp","r");
	fseek(pfDatei, 18L, SEEK_CUR);
	fread(&IH.biBreite, sizeof(int), 1, pfDatei);
	fclose(pfDatei);
	printf ("Breite: %d Pixel\n", IH.biBreite);
	
	//Höhe einlesen
	pfDatei = fopen("bild.bmp","r");
	fseek(pfDatei, 22L, SEEK_CUR);
	fread(&IH.biHoehe, sizeof(int), 1, pfDatei);
	fclose(pfDatei);
	printf ("Hoehe: %d Pixel\n", IH.biHoehe);

	//Gesamtanzahl Bildpunkte berechnen
	IH.biBildpunkte = IH.biBreite*IH.biHoehe;
	printf ("Bildpunkte insgesamt: %d\n\n", IH.biBildpunkte);
	
	//Bildpunkte in Array schreiben
	pfDatei = fopen("bild.bmp","r");
	fseek(pfDatei, 25L, SEEK_CUR);
	for (iX=0; iX<20; iX++)
	{
		//joar....??? ^^
	}
	fclose(pfDatei);
}


aber wie bekomme ich jetzt die bildpunkte in ein array? mit fread() kann ich die ja eigentlich einlesen, aber welchen datentyp nehme ich da? da kommt nur schindluder raus :)

danke ;)

Thema bewerten