MFC Jpg darstellen



  • Ich frage deshalb, weil ich in der Funktion onPaint bisher habe:

    if(isIconic())
    {
    CPaintDC dc(this);
    SendMessage(WM............
    
    ...
    }
    else
    {
    
    CDialog::OnPaint();
    }
    

    und da soll ich jetzt meinen Code drahängen?

    Problem ist nur, dass ich das bisher in OnOpen habe , wo auch der Dialog zum öffnen aufgerufen wird.
    Ruf ich dann da OnPaint auf???



  • Pack das Zeichnen in die else.
    OnPaint wird automatisch aufgerufen. 😉



  • pk hab ich gemacht und jetzt hat er

    1. eine Assert geworfen bei f.Close und
    2. kommt er mit dem pIPic->get_Width(&hmWeite) nicht zurecht Zugriffsbehandlung

    Also von der Logik. ich habe doch nohc kein Bild ausgewählt... Wie soll der das dann jetzt schon darstellen?



  • BMPJPG schrieb:

    Also von der Logik. ich habe doch nohc kein Bild ausgewählt... Wie soll der das dann jetzt schon darstellen?

    Sorry, ich hab mich nicht genau reingelesen - ich dachte, du zeichnest nur.

    Kannst du das abfragen, ob du schon ein Bild gewält hast?
    Z.B. drumherum ein

    if (!m_path.IsEmpty())
    {
    //...
    }
    


  • Super es stellt das ausgewählte Bild dar.
    Aber noch 2 Probleme:

    1. Wenn ich ein Bild auswähle stellt er es nicht dar, erst, wenn ich nochmal eins auswählte stellt er es dar.

    2. Er verzerrt das Bild total. Kann ich da nicht was reinbauen, damit der nicht in die Breite zieht???



  • BMPJPG schrieb:

    1. Wenn ich ein Bild auswähle stellt er es nicht dar, erst, wenn ich nochmal eins auswählte stellt er es dar.

    Ruf nach dem Auswählen mal Invalidate auf oder mach mal ein anderes Fenster vor den Dialog und wieder weg - kannst du es dann sehen?

    Bei 2 weiß ich leider nix, Zeichen ist nicht mein Gebiet. 😞



  • BMPJPG schrieb:

    Er verzerrt das Bild total.

    Vermutlich berechnen zeichenflaeche.Width() und zeichenflaeche.Height() Murks. Möglicherweise durch Vermischung von Pixel/DPI/Zoll oder was auch immer.



  • @estartu:

    ich versteh nicht so ganz was du meinst. Wo soll ich wie invalidate aufrufen?

    @isabeau:

    wi kann ich das Problem beheben??? Und wieso rechnet der Murks?



  • Vielleicht sollte ich noch dazusagen. dass mein Feld auf dem Dialogffeld eine PictureControl ist. Das Feld kann ich so wie ich will skalieren und das Bild wird dementsprechend dem Feld angepasst!



  • War nur so eine Vermutung... Vielleicht stimmen ja auch get_Width(...) und get_Height(...) nicht richtig. Kannst ja mal statt zeichenflaeche.Width(), zeichenflaeche.Height(), hmHoehe, hmWeite und -hmHoehe feste Zahlen-Werte eintragen und gucken, was passiert. Eine Lösung habe ich jetzt auch nicht. Kann mich nur erinnern, dass manche Funktionen mit Pixeln und andere wieder in Dots oder sonstwas rechnen und dass es so zu Verzerrungen kommen kann, wenn man nicht aufpasst. Ich vermute einfach mal, dass der Fehler irgendwo in der Berechnung der oben genannten Parameter liegt. Vielleicht fehlt ja nur ein Umrechnungsfaktor...
    Also eine ähnliche Problematik wie hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39074.html



  • ich habs soweit hingekriegt.
    Man muss mit if Abfragen, ob es Querformat und dann Hochformat ist:

    Für Querformat:

    pIPic->Render (hDC, 
    zeichenflaeche.left,
    zeichenflaeche.top,
    zeichenflaeche.Width(),
    zeichenflaeche.Width()*hmHoehe/hmWeite,
    0,
    hmHoehe,
    hmWeite,
    -hmHoehe,
    NULL);
    

    ABER: der schreibt die Bilder jetzt immer übereinander. Wie kann ich vor jedem neuen Aufruf das alte Bild löschen???????????????



  • Man man man ... dir ist nicht zu helfen -.-



  • doch.. aber wenn du mir nicht helfen magst!!!


Anmelden zum Antworten