ComputNik Geschrieben 11. Januar 2003 Geschrieben 11. Januar 2003 hallo, ist es möglich in einem consolenprogramm die farbinformation eines bestimmten pixels auszulesen ( *bmp && win98/2000) MSDN: grafik/multimedia - GDI - windows GDI - Bitmaps - bitmap reference Von Windows Programmierung hab ich jetzt nicht so den Plan. Da weis ich nicht ob die sachen loadbitmap() und getpixel() funktionieren. giebt es darüber tutorials? bei google hab ich nichts gefunden Danke Zitieren
Klotzkopp Geschrieben 12. Januar 2003 Geschrieben 12. Januar 2003 Sicher geht das. LoadBitmap und GetPixel sind soweit auch schon richtig, du brauchst dazwischen aber noch einen Gerätekontext (DC), in den du die geladene Bitmap reinmalst, bevor du dann die Pixeldaten aus dem DC holen kannst. Wenn du es dir ganz einfach machen willst, dein Programm auch mit anderen Bitmapdateiformaten (gif, jpg) funktionieren soll, und es dich nicht stört, eine Bibliothek zusammen mit deinem Programm auszuliefern, kannst du aber auch GDI+ verwenden. Hier hatten wir schon mal ein Beispiel dafür. Zitieren
M.A.Knapp Geschrieben 12. Januar 2003 Geschrieben 12. Januar 2003 hol die den handle des console-fensters und erzeuge dir einen komptaiblem memory-dc zum dc des handles console windows. erzeuge ein bitmap derselben größe wie das window und kopiere das window in das bitmap. dann kannst du mit getpixel darauf zugreifen. du kannst auch versuchen, direkt auf den dc des handles zugreifen schau dir diese funcs an: GetDC CreateCompatibleDC BitBlt SelectObject GetClientRect CreateBitmap MfG, Michael Zitieren
ComputNik Geschrieben 14. Januar 2003 Autor Geschrieben 14. Januar 2003 GDI+ ist AFAIK bei Windows XP enthalten. Für Windows NT4 SP6, Windows 2000, 98 und ME kann man es hier bekommen: http://www.microsoft.com/downloads/release.asp?releaseid=32738 Hab mir das Beispiel angeschau nur habe ich diese gdiplus.h nicht. Auch nirgends gefunden oder so. Und das was man sich da runterladen kann das ist eine *.dll und keiiiine *.h Ach ja ich arbeite zur zeit ausweishalber auf einem W98 System. :confused: Zitieren
Klotzkopp Geschrieben 14. Januar 2003 Geschrieben 14. Januar 2003 GDI+ (Bibliothek und Header) ist Bestandteil des Windows Core SDK. Gibt's hier: http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ Zitieren
ComputNik Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 Moin, Ich muß noch mal nachfragen, die sache funzt noch nicht so richtig! also ich hab das jetzt mit MFC dialog gemacht. void CDialogBitmapDlg::OnPaint() { CClientDC dc( this ); BITMAP bm; Bild1.GetObject( sizeof( bm ), &bm ); CDC SpeicherDC; SpeicherDC.CreateCompatibleDC( &dc ); SpeicherDC.SelectObject( &Bild1 ); CRect Rect; GetClientRect( &Rect ); dc.SetStretchBltMode( HALFTONE ); dc.StretchBlt( 0, 0, Rect.right, Rect.bottom, &SpeicherDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY ); FILE *datei; char*datei1={"c:\\color.txt"}; datei=fopen(datei1, "w"); if(datei==0) { //MessageBox("Fehler","Fehler"); } fprintf(datei, "Farbwert:\n"); fprintf(datei, "%X", dc.GetPixel(5, 5)); fclose(datei); CDialog::OnPaint(); } [/PHP] ---------------------------------------------------------------------------------------- ich will also die farbinformation in eine Datei schreiben. Das Bild wird angezeigt, keine fehler keine warnungen. GetPixel führt er aus und schreibt auch in die datei, nur nicht so richtig das was ich will! Pixel 1x1 ist bei mir ROT in datei steht %X == FF | %d == 255 => das ist soweit richtig. aber 20x20 ist grün und da schreibt er auch 255 dez. Ich möchte am ende den HTML Hex farbcode haben um ihn in eine html seite reinzuschreiben. Zitieren
Guybrush Threepwood Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 fprintf(datei, "%X", dc.GetPixel(5, 5)); Dadurch schreibst du doch immer nur die Farbinfos des selben Pixels, nämlich den an 5,5, in deine Datei. Oder irre ich mich? Zitieren
ComputNik Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 ne ich hab nur Probiert und die koordinaten manuell gewechselt Zitieren
Klotzkopp Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 Warum hast du die MessageBox auskommentiert? Zitieren
ComputNik Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 wenn die meldung "fehler" kommt kann man die nicht wegklicken und muß das prog mit dem taskmgr schließen da wollt ich keinen stören der sich den code kopiert. das ist alles so eine art codefasching (ich wollt es halt nur schnell probieren) Zitieren
Guybrush Threepwood Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 Hast du mal probiert ob die Werte stimmen wenn du das Bild nicht streckst? Zitieren
ComputNik Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 die stimmen auch da nicht wenn das bild nicht gestreckt ist Zitieren
Guybrush Threepwood Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 Komisch... Frag mal bei allen Funktionen den Rückgabewert ab und schau ob eine vielleicht einen Fehler verursacht. Zitieren
ComputNik Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 Keine fehler gefunden! Zitieren
Guybrush Threepwood Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 char*datei1={"c:\color.txt"}; Das sollte eigentlich so aussehen: char*datei1={"c:\\color.txt"}; Zitieren
ComputNik Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 durch quote PHP zur syntaxvorhebung wird das nicht mit angezeigt ist aber bei mir im quelltext mit drinne Zitieren
Guybrush Threepwood Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 Originally posted by ComputNik durch quote PHP zur syntaxvorhebung wird das nicht mit angezeigt ist aber bei mir im quelltext mit drinne Hast recht, hab ich ganz vergessen. Kommt der Fehler nur bei dem Pixel oder bei mehreren? Oder schreibt er bei allen Pixeln den selben Farbwert? Zitieren
ComputNik Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 ne nicht bei allen aber immer die falschen ich habe 48x48 pixelbild als ressource. und ROT, GELB, SCHWARZ in drei teilabschnitten. wenn ich die farbwerte dann in eine html seite als hintergrund reinkopiere ist der dan grau und grünlichbraun. Zitieren
Klotzkopp Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 Das ist normal. Die Reihenfolge der Farben ist bei COLORREF anders als in HTML. COLORREF ist BGR, HTML ist RGB. Zitieren
ComputNik Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 dc.SetPixel(1,1,00); das funktioniert aber. im bereich 1x1 ist eigentlich ROT. nach setpixel 00 Ist es SCHWARZ. Zitieren
ComputNik Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 Das ist normal. Die Reihenfolge der Farben ist bei COLORREF anders als in HTML. Das verstehe ich jetzt nicht. Das ist doch eigentlich gut oder? HTML == RGB COLORREF == RGB da gibt es ja keine konflikte Zitieren
Klotzkopp Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 Originally posted by ComputNik COLORREF == RGBBGR, nicht RGB. Um aus COLORREF einen Wert zu machen, den du für HTML verwenden kannst, brauchst du folgendes: COLORREF cr = GetPixel( ... ); DWORD colorHtml = (( cr & 0xff0000 ) >> 16) | (( cr & 0xff ) << 16) | ( cr & 0xff00 ); Zitieren
ComputNik Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 COLORREF cr = dc.GetPixel(48,48); DWORD colorHtml = (( cr & 0xff0000 ) >> 16) | (( cr & 0xff ) << 16) | ( cr & 0xff00 ); fprintf(datei, "Farbwert:\n"); fprintf(datei, "%X", colorHtml); fclose(datei); [/PHP] :confused: so richtig funzt das nicht ist im prinzip das gleiche ergebnis wie vorhin. originalfarbe ist blau und ergebnis im HTML ist grau Zitieren
Klotzkopp Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 Versuch es bitte mal mit fprintf(datei, "%06X", colorHtml); Zitieren
ComputNik Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 :uli Danke an alle! nochmal das gesammelte werk: FILE *datei; char*datei1={"c:\\color.txt"}; datei=fopen(datei1, "w"); if(datei==0) { MessageBox("Fehler","Fehler"); } COLORREF cr = dc.GetPixel(0,0); DWORD colorHtml = (( cr & 0xff0000 ) >> 16) | (( cr & 0xff ) << 16) | ( cr & 0xff00 ); fprintf(datei, "Farbwert:\n"); fprintf(datei, "%06X", colorHtml); fclose(datei); [/PHP] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.