in ein hdc ohne hwnd zeichnen!
-
Nabend,
ich habe hier ein riesen Problem. Mal nen bisschen was zu meinem Programm.
Ich sitze grade an einem Konsolenprogramm (32Bit - nicht MFC), welches mir ein Bitmap einliest und dann neu aufbaut und abspeichert.
Dazu wird das Bitmap mit
HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,"raw.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); HDC hdcMem = CreateCompatibleDC(NULL); HBITMAP hBSO = (HBITMAP) SelectObject(hdcMem,hBitmap);als hdc in den Speicher geschrieben.
Dann sollte er zeichnen.
Zum Schluss meiner Void wird dann das hdc in ein hbitmap mittels der int dc2bitmap aus eurer FAQ in eine Datei geschrieben. Und zwar so hier:
dc2bitmap(hdcMem,corr_x,corr_y,"corr.bmp"); SelectObject(hdcMem,hBSO);Klappt alles wunderbar, bis auf den Nachteil, dass die Gurke nicht zeichnen will. Füge ich z.B. Text ein (mittels textout...) dann klappt das wunderbar und der Text taucht vorschriftsmäßig im neuen Bitmpat auf. Aber die Methode SetPixel klappt nicht.
So einen kleinen Ansatz habe ich schon, da ich SetPixel nur in Verwendung mit BeginPaint und EndPaint kenne. Diese beiden Methoden brauchen aber ein hWnd. Und dieses habe ich nicht. Wo bekomme ich das her, so dass mein SetPixel funktioniert bzw. wie kann ich in ein HDC ohne HWND zeichnen?
Ich hoffe ihr könnt' mir weiterhelfen. Ich stehe hier voll auf dem Schlauch.
cya

-
Auch wenn es ein Konsolenprogramm ist gehts hier wohl eindeutig um WinAPI, ich werde dich verschieben

MfG SideWinder
-
Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
LoadImage() liefert ein Handle welches du ja nach HBITMAP castes, na leuchtet jetzt die Lampen wie du an einem HWND kommst?
-
Moin und Danke erstmal für deine schnelle Antwort.
Wenn ich dich richtig verstanden habe, dann lade ich das Bitmap nicht in das hdcMem vom Typ HDC sondern in ein HWD.
Habs hiermit probiert
HWND hwnd = (HWND)LoadImage(NULL,"raw.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);Dann steht mein Bitmap in einem HWND, es muss aber hinterher wieder in einem HDC stehen, weil ich es mit der INT dc2bitmap() aus eurer FAQ zurück in ein Bitmap schreibe.
Ich stehe hier auf dem Schlauch, ich habe die letzten Tage und Nächte so oft vor dem Quelltext gehangen, ich weiß schon nicht mehr wo vorn und hinten ist!
cya

-
Eigentlich müsste SetPixel() auch mit hdcMem funktionieren...
-
Ich bins nochmal,
ich habe grad ein wenig herumexperimentiert aber es bleibt dabei. Textout funktioniert und Setpixel funktioniert nicht.
Ich habs so hier probiert.
HWND hBitmap1 = (HWND)LoadImage(NULL,"raw.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); HDC hdcMem1 = CreateCompatibleDC(NULL); HBITMAP hBSO1 = (HBITMAP) SelectObject(hdcMem1,hBitmap1); PAINTSTRUCT ps; for(int i=0;i<300;i++) { BeginPaint(hBitmap1, &ps); SetPixel(hdcMem1,10,i,RGB(234,234,234)); TextOut(hdcMem1,10,10,"hallo",5); EndPaint (hBitmap1, &ps); } dc2bitmap(hdcMem1,500,500,"corr.bmp"); SelectObject(hdcMem1,hBSO1); DeleteObject(hBitmap1);So wenn ich nun das Programm laufen habe, dann habe ich ich als Ergebnis nen schwarzes Bitmap der Größe 500x500, bei dem an der Stelle 10,10 der Text "Hallo" steht. Die Linie die er zeichnen sollte fehlt.
cya
-
ES FUNKTIONIERT JAAAAAAAAAAAAAAAAA ES FUNKTIONIERT

Leute noch mal fettes Mercy für eure Hilfe.
Wenn ich euch sage worans lag, dann steinigt ihr mich bestimmt.

Naja, meine x- und y-Koordinaten wurden in einer for-schleife generiert. Und die y-koordinate wird falsch berechnet und liegt somit nicht im Bildbereich.
Ich weiß, bitte nicht hauen................
Fettes Mercy nochmal.
cya

-
Wären zum Linie zeichnen nicht MoveToEx() und LineTo() geeigneter ? (und wahrscheinlich auch schneller...)
-
Ja zum Linie zeichnen schon, aber mein Programm muss was vollkommen anderes machen wobei ich unbedingt Setpixel brauchte.
Schonmal was von verwackelten Luftbildaufnahmen gehört die wieder gerichtet werden müssen.
Deshalb musste ich das Ausgangsbild pixelweise durchforsten und dann jedes Pixel drehen, Farbwert bestimmen und wieder in ein neues Bild setzen.
So und der Algorithmus oben sollte erstmal nur testen, ob SetPixel überhaupt so funktioniert wie ich mir das vorstelle.
cya
