Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Pixel auslesen

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 < [ 2 ]
000
10.08.2004, 11:43 Uhr
~Airdamn
Gast


Hallo,

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.

thx.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.08.2004, 12:06 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


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ßbrote

Dieser Post wurde am 10.08.2004 um 12:07 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.08.2004, 12:41 Uhr
~Airdamn
Gast


Jo, das hab ich schon ;o)
Kann mir per Menü eine Datei auswählen und die wird dann geladen und angezeigt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.08.2004, 12:58 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


na das ist doch schon mal was...

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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.08.2004, 13:33 Uhr
~Airdamn
Gast


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ß.

Hab ich was vergessen/übersehen/nicht beachtet?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.08.2004, 13:52 Uhr
~Airdamn
Gast



C++:
void CECGPSView::OnLButtonDown(UINT nFlags, CPoint point)
{
    BITMAP bm;
    CECGPSDoc* pDoc = GetDocument();

    if( pDoc && pDoc->m_bmpBitmap.m_hObject )
    {
        pDoc->m_bmpBitmap.GetBitmap( &bm );
        CDC* pDC = GetDC();
        COLORREF cr = pDC->GetPixel( point );

        int nRed     = GetRValue( cr );
        int nGreen= GetGValue( cr );
        int nBlue  = GetBValue( cr );
    }

    CView::OnLButtonDown(nFlags, point);
}



hier das Bild wird angezeigt, aber die Farben (nRed, nGreen, nBlue) sind immer 255?!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.08.2004, 15:56 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.08.2004, 09:20 Uhr
~Airdamn
Gast


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 );
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.08.2004, 11:41 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hol dir mal den DC von dem bitmapfenster in dem du das malst

also CDC *pDC = GetDlgItem(IDC....)->GetDC();
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.08.2004, 12:26 Uhr
~Airdamn
Gast


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...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: