Linienvoransicht,Lupe,eigenes Dateiformat



  • Hi Leute,
    1.
    Ich bin grad dran ein Paint nachzuprogrammieren, nun stehe ich aber vor folgendem Problem, wenn man in Paint eine Linie (rechteck,Kreis) zeichnet, sieht man ja eine Voransicht wo die Linien rumlaufen. Ich hab in die Richtung auch schon einiges probiert bin aber nicht weiter gekommen... Weiß da jemand wie man das machen kann?

    Des weiteren will ich eine Lupe einprogrammieren, die sich in einem extra Fenster befindet und dann im umkreis von z.B. 50 Pixel des Mauszeigers vergrößert. Gibt es schon eine "Vergrößerungsfunktion" ?

    Wie kann man außerdem verhindern dass der Hintergrund, wenn man das Fenster minimiert und wieder maximiert nicht neu gezeichnet wird? Geht das überhaupt oder muss ich jede Linie (rechteck,Kreis) z.B. in einer Struktur speichern und diese dann alle weider malen lassen?

    Zum speichern will ich ein eigenes Dateiformat nehmen, das in der Form so aussieht:

    x-Koordinate,y-Koordinate,Farbe

    eines Pixels.
    Das Speichern funktioniert auch ganz gut, nur mit dem Auslesen hab ich noch Probleme, weiß jemand wie ich das machen könnte?

    So, jetzt hätten wirs erst mal... 😃 Ich hoffe mir kann jemand (egal zu welchem Punkt) helfen!!! 👍



  • 1. WM_MOUSEMOVE abfangen
    - wenn objekt erstellt wird dann zeichne objekt an aktuelle position.

    2. keine ahnung

    3. ich würd alles immer mitspeichern in strukturen etc. und beim aufrufen von WM_PAINT nur aus denn strukturen zeichnen

    4. ich vermute du möchtest nur pixeldaten speichern dann wäre mein vorschlag:

    // pseudo
    
    // structs
    header { x, y }
    farbe {r, g, b}
    
    // datei aufbau
    header
    farbe[x * y]
    
    // lesen
    headerlesen
    arrayfarbe = new farbe[x * y];
    lesen von array, grösse = sizeof(farbe) * x * y;
    


  • 2.) StretchBlt bzw. StretchDIBits
    3.) ... oder über Backbuffering 🙄



  • 3.) aber über eine strukturierung der daten könnte man zum beispiel erweiterte funktion, wie undo etc, leichter realisieren.



  • Genau, aber wie lese ich die Daten wieder ein? In ein Array klar, aber wie krige ich daraus dann wieder Int Werte und wie sage ich ihm dass er aufhören soll zu lesen?

    while (c != 44)
    {
    c = fgetc (...);
    }
    

    @flenders Was heißt Backbuffering?



  • MasterCounter schrieb:

    Genau, aber wie lese ich die Daten wieder ein? In ein Array klar, aber wie krige ich daraus dann wieder Int Werte und wie sage ich ihm dass er aufhören soll zu lesen?

    kommt auf deine daten(structs) an. wenn du weisst wie gross dein bild ist bzw. wird dann weist du doch auch wieviel du lesen musst, egal ob binär oder text,
    (x * y)



  • MasterCounter schrieb:

    @flenders Was heißt Backbuffering?

    Auch Double-Buffering genannt. Du zeichnest dabei nicht direkt auf den Bildschirm, sondern in einen DC im Speicher, den du dann bei WM_PAINT nur auf den Bildschirm blitten musst - dadurch flackert es dann auch nicht so 🙂



  • Und wie mach ich das mit Backbuffering? So:

    bufferhdc = GetDC(hWnd); /* weiß die Parameter jetzt nicht so genau aus dem Kopf  :D */
    

    und dann einfach auf das zeichnen? Wenn ja, wie geb ich das dann aus?
    😕

    @miller_m:
    kannst du mir mal ein Codebeispiel zum lesen und schreiben posten? 😉





  • Willst du unbedingt ein eigenes Dateiformat, oder bist du auch mit dem normalen Bitmap-Format zufrieden?!

    FAQ: Bild speichern 🙂



  • thx, programmiere allerdings in c,
    kann ich dann auch Ctest weglassen
    (int Ctest::dc2bitmap(HDC hdc, int width, int height, char *filename) )
    oder muss ich da dann noch was ändern? 😕
    Gibts auch ne Funktion zum Öffnen eines Bildes?



  • MasterCounter schrieb:

    thx, programmiere allerdings in c,
    kann ich dann auch Ctest weglassen
    (int Ctest::dc2bitmap(HDC hdc, int width, int height, char *filename) )
    oder muss ich da dann noch was ändern? 😕

    Nein, sollte eigentlich so gehen wie du meintest (einfach weglassen) 🙂

    MasterCounter schrieb:

    Gibts auch ne Funktion zum Öffnen eines Bildes?

    Dazu kannst du dann ganz einfach die WinAPI-Funktionen LoadBitmap bzw. LoadImage verwenden.
    Auf den Bildschirm bekommst du es dann über CreateCompatibleDC, SelectObject, BitBlt 🙂



  • Vielen Vielen Dank an euch zwei! Echt klasse Forum mit Top-Leuten!!!
    👍


Anmelden zum Antworten