Veröffentlicht 11. Januar 200322 j 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
12. Januar 200322 j 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.
12. Januar 200322 j 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
14. Januar 200322 j 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:
14. Januar 200322 j GDI+ (Bibliothek und Header) ist Bestandteil des Windows Core SDK. Gibt's hier: http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
13. Februar 200322 j 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.
13. Februar 200322 j 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?
13. Februar 200322 j 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)
13. Februar 200322 j Komisch... Frag mal bei allen Funktionen den Rückgabewert ab und schau ob eine vielleicht einen Fehler verursacht.
13. Februar 200322 j char*datei1={"c:\color.txt"}; Das sollte eigentlich so aussehen: char*datei1={"c:\\color.txt"};
13. Februar 200322 j durch quote PHP zur syntaxvorhebung wird das nicht mit angezeigt ist aber bei mir im quelltext mit drinne
13. Februar 200322 j 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?
13. Februar 200322 j 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.
13. Februar 200322 j Das ist normal. Die Reihenfolge der Farben ist bei COLORREF anders als in HTML. COLORREF ist BGR, HTML ist RGB.
13. Februar 200322 j dc.SetPixel(1,1,00); das funktioniert aber. im bereich 1x1 ist eigentlich ROT. nach setpixel 00 Ist es SCHWARZ.
13. Februar 200322 j 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
13. Februar 200322 j 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 );
13. Februar 200322 j 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
13. Februar 200322 j :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]
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.