mikrocontroller.net

Forum: PC-Programmierung 2D Array aus Bitmap Bild


Autor: Alex M. (alex06)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include <windows.h>
#include <stdio.h>
#include<string.h>
#include <iostream>

using namespace std;
void Bitmap2Array(char filename, int** M)
{
//filename:Path where the bmp file is located
char buf[100];
char file=strcpy(buf,filename);  //Fehlermeldung hier
HDC hdc;
// Handle for the Bitmap
static HBITMAP hbitmap;
//Bitmapobject 
BITMAP bm;  
RGBQUAD rgbquad;          
hbitmap=(HBITMAP)LoadImage(NULL,file,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
GetObject(hbitmap,sizeof(bm),&bm); 
int Width=bm.bmWidth,Height=bm.bmHeight;
int i,j;
byte red,green,blue;
float gray;
for(j=0;j<=Height;j++){
for(i=0;i<=Width;i++){
COLORREF col=GetPixel(hdc,j,i);
// Extract color components (R,G,B)
blue=rgbquad.rgbBlue(col);   // Fehlermeldung hier
green=rgbquad.rgbGreen(col); // Fehlermeldung hier
red=rgbquad.rgbRed(col);     //Fehlermeldung hier
// Convert from RGB to gray scale, using
gray = 0.3*red + 0.59*green + 0.11*blue;

//Store the gray values in the array
//M[i][j]=            ;
}
}
}
Habe die Funktion "GetDIbits" gelesen weiss aber nicht wie ich sie 
erfolgreich einsetzen kann.
Danke

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich kriege 4 fehlermeldungen, die ich nicht verstehe.

WELCHE ?

Autor: Alex M. (alex06)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich kriege wegen folgeneder Zeilen Fehlermeldungen:
char file=strcpy(buf,filename);
hbitmap=(HBITMAP)LoadImage(NULL,file,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
blue=rgbquad.rgbBlue(col);   // Fehlermeldung 
green=rgbquad.rgbGreen(col); //  
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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn du nicht beruflich oder aehnlich dazu gezwungen bist, nimm 
nicht VC++ 6. Dieser Compiler ist dermassen alt, dass du sehr schnell 
auf Bugs und Verletzungen des C++-Standards stossen wirst die dich nur 
aufhalten werden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.