in ein hDc ohne hWnd zeichnen!


  • chicken
  • 863 Aufrufe 2 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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 eingelesen und als HDC im Speicher abgelegt. Ist eigentlich nebensächlich, das ermöglicht mir zumindestens eine Bitmapbearbeitung auf Konsolenebene und klappt ganz gut.

    Quellcode

    1. HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,"raw.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    2. HDC hdcMem = CreateCompatibleDC(NULL);
    3. HBITMAP hBSO = (HBITMAP) SelectObject(hdcMem,hBitmap);


    Dann sollte er zeichnen (mit SetPixel).

    Zum Schluss meiner Void wird dann das HDC aus dem Speicher ausgelesen und wieder in ein HBITMAP zurückgeschrieben.

    Klappt alles wunderbar, bis auf den Nachteil, dass die Gurke nicht zeichnen will. Füge ich z.B. einen Text mittels

    Quellcode

    1. TextOut(hdcMem,10,10,"Hallo",5);


    erscheint im Ausgabebitmap an dem Pixel 10,10 der String "Hallo. Klappt also wunderbar. Will ich aber ein Pixel mittels SetPixel eintragen so klappt das 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, weil ich ne Konsolenanwendung ohne MFC habe. Wo bekomme ich das nun 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 :lego:
    [SIZE=1]Dumme Antworten sind rein zufällig und auf einen Fehler in der Speicherverwaltung zurückzuführen
    [/SIZE]
  • Habe es selbst hinbekommen,

    du kannst nicht in hdc zeichnen. Du kannst nur in ein hwnd zeichnen. Also habe ich loadimage in ein hwnd gecasted und nicht in ein hbitmap.

    Textout ist wiederum ne Textausgabe, welches nicht beginpaint und endpaint benötigt.

    Nun funktionierts wunderbar und so hier muss es aussehen:

    Quellcode

    1. HWND hBitmap1 = (HWND)LoadImage(NULL,"raw.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    2. HDC hdcMem1 = CreateCompatibleDC(NULL);
    3. HBITMAP hBSO1 = (HBITMAP) SelectObject(hdcMem1,hBitmap1);
    4. PAINTSTRUCT ps;
    5. for(int i=0;i<300;i++)
    6. { BeginPaint(hBitmap1, &ps);
    7. SetPixel(hdcMem1,10,i,RGB(234,234,234));
    8. EndPaint (hBitmap1, &ps);
    9. }
    10. dc2bitmap(hdcMem1,500,500,"corr.bmp");
    11. SelectObject(hdcMem1,hBSO1);
    12. DeleteObject(hBitmap1);
    Alles anzeigen


    cya :lego:
    [SIZE=1]Dumme Antworten sind rein zufällig und auf einen Fehler in der Speicherverwaltung zurückzuführen
    [/SIZE]