Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben
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:

  • 5 Wochen später...
Geschrieben

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.

Geschrieben

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)

Geschrieben

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.

Geschrieben
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

Geschrieben
Originally posted by ComputNik

COLORREF == RGB

BGR, 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 );

Geschrieben



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

Geschrieben

: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]

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...