weiß jemand wie man Pixel aus einem Bild auslesen kann? Ich möchte ein Bild laden und dann die Farbwerte der Pixel (je nach Mausposition) ausgeben und dann evtl. bearbeiten.
ist nicht ganz einfach aber geht... ich wette es gibt massenweise funktionen und libs dafür aber ich hab mir den spass selber geschrieben da ich keine lust mehr hatte weiter nach libs zu suchen... ich habs bisher nur mit bitmaps gemacht...
als erstes muss du das bitmap laden... und anzeigen
das geht z.b mit BitBlt... gibts beispiele im forum zu musst du mal suchen...
wenn du soweit bist gehts weiter... -- ...fleißig wie zwei WeißbroteDieser Post wurde am 10.08.2004 um 12:07 Uhr von Windalf editiert.
mit GetPixel von CDC bekommst du den RGB-wert des jeweiligen Pixels... jetzt musst du quasi noch wissen von welchem Pixel gerade die Rede ist...
dazu holst du dir einfach die GetCurPos (die position des Maus cursors) und mit den angaben solltes du auch den richtigen Pixelwert dazu bekommen...
allerdings sind die koordinaten noch auf Dialogkoordinaten bezogen... um das umzurechenen auf die kooardinaten des steuerelements in dem du das bild anzeigst kannst du die funktionen (ClientToScreen und ScreenToClient verwenden).... falls das angezeigt bild noch gezoomt oder geschrupft ist muss du es halt noch entsprechend mit dem zoom gewichten was du anzeigst... -- ...fleißig wie zwei Weißbrote
soweit so gut, vielen dank erstmal. Ich hab aber nun eine SDI-Anwendung. Das Bild hab ich in der Doc geladen und es wird in der Paint Methode von der View gezeichnet. Wenn ich nun einen Pixel auslese, dann ist der immer weiß.
ups mit SDI hab ich bisher nix gemacht... ich würde glatt vermuten du hast dir den falschen DC geholt... CDC* pDC = GetDC(); holt sich den von this... ich weiss nicht wie du den bekommst von dem teil wo dein bitmap drauf ist... den bräuchtest du dann ja... tut mir leid ich hab ähnliches spielereien bisher immer nur mit dialogen gemacht... oberflächen desigenen hat mich bisher nicht interessiert und da hab ich mich nur aufs wesentlich beschränkt... -- ...fleißig wie zwei Weißbrote
Ok, nun hab ich das ganze in einem Dialog. Das Bild wird per Button geladen und durch OnPaint() gezeichnet. Trotzdem hab ich bei meinen Farb-Variablen immer den Wert 255
C++:
if( m_bmpBild.m_hObject ) { CDC* pDC = GetDC();
COLORREF cr = pDC->GetPixel( point ); int red = GetRValue( cr ); int green = GetGValue( cr ); int blue = GetBValue( cr ); }
mein Code oben steht im OnLButtonDown( UINT nFlags, CPoint point ) also hol ich mir den DC von dem Dialog, indem das Bild gezeichnet wird (läuft alles in einem Dialog).
Wenn ich nicht einen Pixel vom Bild erwische, dann müsste ich doch die Standard-Fensterfarbe bekommen. Hab aber immer 255, 255, 255...