2D Array aus Bitmap Bild

#794475
Lesenswert?

Hallo,
bin ein c++ Anfänger und arbeite mit VC++ 6.0.Ich möchte mit VC++ 6.0 
die Grauwerte eines 8-bit grayscale Bitmap Bildes ermitteln und in einem 
2D Array speichern.Ich habe auf dieser Seite gesehen, dass es einen 
ähnlichen Beitrag gibt aber mir ist es immer noch nicht klar wie ich die 
Grauwerte im Array M kriegen kann.ich kriege 4 fehlermeldungen, die ich 
nicht verstehe.
1
#include <windows.h>
2
#include <stdio.h>
3
#include<string.h>
4
#include <iostream>
5

6
using namespace std;
7
void Bitmap2Array(char filename, int** M)
8
{
9
//filename:Path where the bmp file is located
10
char buf[100];
11
char file=strcpy(buf,filename);  //Fehlermeldung hier
12
HDC hdc;
13
// Handle for the Bitmap
14
static HBITMAP hbitmap;
15
//Bitmapobject 
16
BITMAP bm;  
17
RGBQUAD rgbquad;          
18
hbitmap=(HBITMAP)LoadImage(NULL,file,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
19
GetObject(hbitmap,sizeof(bm),&bm); 
20
int Width=bm.bmWidth,Height=bm.bmHeight;
21
int i,j;
22
byte red,green,blue;
23
float gray;
24
for(j=0;j<=Height;j++){
25
for(i=0;i<=Width;i++){
26
COLORREF col=GetPixel(hdc,j,i);
27
// Extract color components (R,G,B)
28
blue=rgbquad.rgbBlue(col);   // Fehlermeldung hier
29
green=rgbquad.rgbGreen(col); // Fehlermeldung hier
30
red=rgbquad.rgbRed(col);     //Fehlermeldung hier
31
// Convert from RGB to gray scale, using
32
gray = 0.3*red + 0.59*green + 0.11*blue;
33

34
//Store the gray values in the array
35
//M[i][j]=            ;
36
}
37
}
38
}
Habe die Funktion "GetDIbits" gelesen weiss aber nicht wie ich sie 
erfolgreich einsetzen kann.
Danke
#794523
Lesenswert?

ich kriege wegen folgeneder Zeilen Fehlermeldungen:
1
char file=strcpy(buf,filename);
2
hbitmap=(HBITMAP)LoadImage(NULL,file,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
3
blue=rgbquad.rgbBlue(col);   // Fehlermeldung 
4
green=rgbquad.rgbGreen(col); //  
5
red=rgbquad.rgbRed(col);

C:\VisualC\Bit2Arr\Test.cpp(15) : error C2664: 'strcpy' : Konvertierung 
des Parameters 2 von 'char' in 'const char *' nicht moeglich
        Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp 
erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- 
oder Funktionsformat
C:\VisualC\Bit2Arr\Test.cpp(26) : error C2664: 'LoadImageA' : 
Konvertierung des Parameters 2 von 'char' in 'const char *' nicht 
moeglich
        Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp 
erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- 
oder Funktionsformat
C:\VisualC\Bit2Arr\Test.cpp(40) : error C2064: Ausdruck ergibt keine 
Funktion
C:\VisualC\Bit2Arr\Test.cpp(41) : error C2064: Ausdruck ergibt keine 
Funktion
C:\VisualC\Bit2Arr\Test.cpp(42) : error C2064: Ausdruck ergibt keine 
Funktion
Persönliche Seite #794622
Lesenswert?

Die erste Fehlermeldung bekommst Du wegen

  char file=strcpy(buf,filename);

Das enthält gleich mehrere Fehler - der Rückgabewert von strcpy ist 
nicht vom Typ char, und das zweite Argument "filename" ist von Dir als 
char deklariert.

Die zweite Fehlermeldung bekommst Du aus exakt demselben Grund - der 
Parameter "file" ist --s.o.-- als char deklariert.

Ein char ist aber genau ein Zeichen.

Dir fehlen wohl ein paar C-Grundlagen.

Literaturhinweis:
Brian Kernighan & Dennis Ritchie - "Programmieren in C", zweite Auflage, 
Hanser-Verlag.
#794667
Lesenswert?

Rufus t. Firefly wrote:

> Dir fehlen wohl ein paar C-Grundlagen.

Nicht nur das. Da fehlen auch etliche C++ Grundlagen.
Es gibt in C keinen wirklichen Grund für strings mit
Character Arrays rumzuwurschten. In C++ gibt es dafür
den Datentyp std::string.

> Literaturhinweis:
> Brian Kernighan & Dennis Ritchie - "Programmieren in C", zweite Auflage,
> Hanser-Verlag.

Weiterer Literaturhinweis:
Bjarne Stroustrup - "The C++ Programming Language"
Addison Weslay

Und für die Windows Programmierung wirst du auch Literatur
benötigen. Da hab ich jetzt aber keinen Tip parat.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren