Problem mit StretchBlt und scrollen



  • Hallo

    ich habe ein etwas merkwürdiges Problem, um das ich mich seit mehreren Tagen im Kreis drehe...

    Ich habe eine Funktion realisiert, welche ein Bitmap in ein gegebenes Fenster darstellt. Da die Fensterbreite und die Bildbreite nicht übereinstimmen (Bilder sehr viel größer als das Fenster) passe ich das Ganze per StretchBlt ein. Weiterhin habe ich mit der selben Funktion ein Zoom realisiert, mit welchem der Nutzer das Bild bis auf eins zu eins Darstellung runterzoomen kann. Das alles Funktioniert auch sehr gut...

    Nun zu meinem eigentlichen Problem: sobald der Nutzer in das Bild hineinzoomt, ist das Bild breiter als das Fenster, er braucht deshalb einen Scrollbalken, mit dem er das Bild verschieben kann. Das funktioniert leider nicht richtig.

    Der Zoom ist derart realisiert, dass das komplette Bild einfach in ein entsprechend breiteres Fenster geblittet wird. Die Darstellung erfolgt also nicht in der Fensterbreite, sondern in der Fensterbreite + Zoomfaktor. Die Scrollbalken werden nat. in ihrer Reichweite auf diesen Wert gesetzt.

    Das Problem ist nun, das die Verschiebung des Bildes nicht um den Wert veschoben wird, der im Scrollbalken angegeben wird, dadurch wird ein Teil des Bildes am rechten Rand abgeschnitten...

    Der Code:

    [cpp]dc.StretchBlt(0, //bei 0;0 im Zielfenster beginnen
                  0,
                  Fensterbreite + Zoomfaktor, //Bild auf die Breite ziehen, dem Zoomfaktor entspricht
                  Fensterhoehe,
                  memDC,
                  BildPositionX, //Position der Scrollbars
                  BildPositionY,
                  Bildbreite, //Breite des Bildes
                  Bildhoehe,
                  SRCCOPY);
    [/cpp]
    

    Ein kurzes Beispiel zur Verdeutlichung: Wenn der Zoomfaktor "1" beträgt, dann wird das Bild in einem Fenster dargestellt, das Fensterbreite + 1 breit ist. Die Scrollbar hat den Wert "1", man kann also das Bild um einen Pixel verschieben.

    Bei der Verschiebung jedoch mit der Scrollbar wird nicht um dieses eine Pixel verschoben, sondern um weiniger... Warum?

    Sieht jemand den Fehler?

    Ich hoffe mir kann geholfen werden, vielen Dank im Voraus.

    Gruß Stephan



  • Hallo, ich habe das Problem erkannt, und auch gelöst...

    Es ist wirklich erstaunlich, es ist nicht das erste mal, das mich allein das Verfassen eines Beitrages hier im Forum auf die richtige Spur gebracht hat... Es scheint wohl so, dass das Berichten von einem Problem irgendwie die richtigen Fragen hervorruft.

    OK, was war falsch:

    Das Problem ist, dass die Pixel des Bildes nicht eins zu eins umgerechnet werden können, da ja, wenn gestretcht wird, mehrere Pixel des Quellbildes in ein Pixel des Zieles gepackt werden. Will man nun um ein Pixel der Anzeige verschieben, muss man das Quellbild um soviele Pixel verschieben, wie ebend in das eine Pixel der Anzeige reingestretcht werden.

    Ich hoffe, das war etwas verständlich.

    Bis zu meiner nächsten Frage.

    Einen schönen Tag noch.

    Gruß Stephan


Anmelden zum Antworten