Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » wie komme ich an Bildinformationen??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.12.2003, 11:09 Uhr
tin24



Hallo,
Ich habe ein Prog, mit dem ich Bmp anzeigen kann.
Die Anzeige des Bildes funktioniert.

Die Informationen zum Bild liegen in einem HBitmap.

->Wie kann ich einem Feld (Pointerfeld) die Werte der einzelnen Pixel übergeben und wo kann ich die Kantenlängen finden?

Wenn ich dieses Feld hätte, könnte ich eine Kantendetektion über das Feld laufen lassen. (bereits programiert)

->Wie kann ich dann anschließend aus dem Feld ein HBitmap erzeugen?


vielen Dank

Martin

Sys.: Win 2000
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.12.2003, 12:37 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du kannst das bitmap direkt öffnen im header steht irgendwo wie hoch und breit das teil ist und ab wo die daten beginnen. was duzu noch wissen musst ist wie die daten zu interpretieren sind. also ob das ein sw- oder farb bitmap ist und wie kodiert wurde (also mit 24 bit, 8 bit, 1bit usw...)
Guck mal in die Rätselecke da hab ich mal ein Rätsel mit nem Bitmap gestellt.
Wenn ich mich nicht irre müssten an der Stelle wo ich das Bitmap einlese kommentare stehen was genau ich da am Header einlese. Dann kennst du auch die positionen für höhe, breite und datenanfang...

Kanten findest du dann in etwa so

C++:
#define Pixelhoehe 1024  //oder wie gross auch immer dein bild auch ist...
#define Pixelbreite 1024

int getEdge(unsigned char* picture, int fixerAchswert,int schwelle,int vertOderHor, int vorwOderRueck, int pixelabstand, int startwert, int zielwert){
int help,i=0;

if(fixerAchswert<0 || (vertOderHor==1 && fixerAchswert>Pixelhoehe-1-pixelabstand) || (vertOderHor==0 && fixerAchswert>Pixelbreite-1-pixelabstand) || startwert<0 || (vertOderHor==1 && zielwert>Pixelbreite-1-pixelabstand) || (vertOderHor==0 && zielwert>Pixelhoehe-1-pixelabstand))return-1;

if(vorwOderRueck)help=1; else help=-1;

if(vertOderHor){        //vertikale Kante suchen

    if(vorwOderRueck) i=startwert; else i=zielwert;

    while((i>=startwert) && (i<=zielwert)){
    
        if( abs(picture[(i+pixelabstand) + Pixelbreite*fixerAchswert] - picture[i + Pixelbreite*fixerAchswert] )>schwelle){
            if(vorwOderRueck) return i+1+pixelabstand/2; else return i-pixelabstand/2;    
        }
        if(vorwOderRueck) i++; else i--;
        
    }

}else{                //horizontale Kante suchen

    if(vorwOderRueck) i=startwert; else i=zielwert;

    while((i>=startwert) && (i<=zielwert)){
    
        if(abs(picture[fixerAchswert + Pixelbreite*(i+pixelabstand)] - picture[fixerAchswert + Pixelbreite*i] )>schwelle){
            if(vorwOderRueck) return i+1+pixelabstand/2; else return i-pixelabstand/2;    
        }
        if(vorwOderRueck) i++; else i--;
    
    }

}

return -1;
}



--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 19.12.2003 um 12:53 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.01.2004, 10:46 Uhr
tin24



Deinen Vorschlag habe ich durchgelesen, aber mir fehlt da ein wenig der Durchblick, denn in deinem Rätsel arbeitest du mit Char Feldern, ich aber suche eine möglichkeit die Informationen aus einem Hbitmap zu bekommen und sie nach dem bearbeiten wieder in einem Hbitmap zu schreiben.
Weiters habe ich noch eine Frage:
Wie kann ich feststellen um welcher Farbtiefe es sich handelt, wenn ich bei der Auswahl der Datei nur auf die Endung .bmp achte.

Ich versuche mein Probelm besser darzustellen:

Datei aussuchen (programmiert)
|
|
Bild darstellen (programmiert)
|
|
Umwandlung der Dateiinformation (hBitmap) in ein Array (Pointerfeld)
(mit berücksichtigung der Farbtiefe)
(gesucht)
|
|
Filterfunktion (Sobel, Canny...) (programmiert)
|
|
Umwandlung des Pointerfeldes wieder in ein Hbitmap (gesucht)
|
|
Darstellung des Bildes (programmiert)

----------------------------------------
Das Bild muss nicht in Farbe bearbeitet werden (es reich S/W)
Das nächste Problem ist, dass es sich um ein 4 MPixel Jpg Datei handelt, die ich noch in ein Bmp umwandlen muss.

Ich wäre für jeden Tipp sehr dankbar.

Martin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.01.2004, 13:17 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ich hatte mal ein ähnliches problem, habe das auch so nciht gelöst bekommen wobei das bestimmt auch mit dem hbitmap geht...
ich vermute mal man muss da irgendwie ein CBitmap draus machen und dann sich mit GetBitmap in ein array schreiben lassen...

Ich bin damals den komplizierten weg gegangen...
Da ich immer die gleichen bitmaps verwendet habe (soll heissen die waren gleich codiert (8_bit sw) habe ich mir die dateistruktur angeschaut... Wenn du nur schwarz weiss willst würde ich mir einfach den pointer auf die daten aus dem header lesen und noch die länge und breite des bildes, dann kannst du dir die informationen direkt aus der datei nehmen ohne dieses blöde mfc...
HBitmap nimmst du dann nur noch zum anzeigen aber an sonsten arbeitest du direkt mit den rohen dateien (ist also plattformunabhängiger)
Die Farbtiefeninformationen bekommst du auch aus dem Header
Schau mal in die Rätselecke da habe ich mal ein Bildfilterrätsel gemacht da ist der Header von nem Bitmap mitkommentiert...

Ich spiele bei so nem Online-Game mit (www.the-arena.de) da bekommt man für jedes Login punkte... damit man das nicht skripten kann muss man immer beim login noch ne zahl eingeben die auf der webseite als jpg angezeigt wird...
das ich das trotzdem skripten wollte habe ich das so gemacht das ich mir das bild runtergeladen habe und dann mir eine kleine zahlenerkennung geschrieben habe um mich dann doch automatisch einloggen zu können
so aber zurück zum thema, da hatte ich auch das problem mit jpg...
Ich habe mir da so nen converter runtergeladen den ich dann einfach mit system("jpg2bmp my.jpg mybmp"); aufgerufen habe. das hat mir das jpg problem gelöst... wenn du willst kann ich dir den converter mailen....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: