PicBox mit "Zoom" befüllen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    PicBox mit "Zoom" befüllen

    Hi,

    ich versuche eine Routine zu schreiben, die eine .jpg Datei in einer Vorschau-Picture Box anzeigt.

    Dazu wandle ich die .jpg Datei zunächst in eine BitMap um ... das funktioniert auch. (Die Bitmap kann ich z.B. in einen andere Datei speichern.)

    Danach lade ich die BitMap in eine Picture Box. So habe ich das versucht:

    VB.NET-Quellcode

    1. Dim copyImage As Image = ...
    2. PicPreview.SizeMode = PictureBoxSizeMode.CenterImage
    3. PicPreview.Image = copyImage


    Das klappt auch soweit .... aber ...

    ... ich sehe in der Picture Box immer nur die linke oder rechte obere Ecke des Bildes. Egal was ich bei .SizeMode eintrage (Zoom, StretchImage, ...) das Ergebnis ist immer nur ein Teil des Bildes.

    Was mache ich denn falsch ? Ich würde natürlich gern das komplette Bild sehen wollen.

    Ich hoffe, ich habe mein Anliegen verständlich machen können.
    LG

    Peter

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Peter329 schrieb:

    VB.NET-Quellcode

    1. PicPreview.SizeMode = PictureBoxSizeMode.CenterImage
    Machst Du

    VB.NET-Quellcode

    1. PicPreview.SizeMode = PictureBoxSizeMode.Zoom
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Erst mal Danke für deine Antwort.

    Jau .... wie oben geschrieben habe ich bereits alle möglichen Einträge für den Size Mode ausprobiert. Irgendwie klappt das aber nicht .. und ich habe keine Ahnung woran das liegen könnte.

    Das ist der neue Code:

    VB.NET-Quellcode

    1. PicPreview.SizeMode = PictureBoxSizeMode.Zoom


    Den Hintergrund der PictureBox habe ich grün eingefärbt.

    Nach wie vor sehe ich die linke obere Ecke des Bildes.

    Erst wenn man die Form vergrößert ... (die PictureBox ist mit Dock.Fill angeheftet), sieht man das vollständige Bild ... (s. Anhang)

    Was mache ich denn nur falsch ?

    LG
    Peter
    @Peter329 Wie ist denn die Form aufgebaut, in der PicPreview eingebettet ist?
    Kann es sein, dass Du der PictureBox ein Anchor oder ein Dock mitgeben musst?
    Mach das ganze einfach mal im Designer und sieh Dir den vom Studio generierten Code an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nochmals Danke, dass du dich mit meinem Problem befasst hast.

    RodFromGermany schrieb:

    Kann es sein, dass Du der PictureBox ein Anchor oder ein Dock mitgeben musst?


    Hab ich doch geschrieben.

    Peter329 schrieb:

    die PictureBox ist mit Dock.Fill angeheftet


    Wenn man die PicBox statt mit Dock.Fill alternativ mit Anchor-Top-Left-Right-Bottom anfügt, ist das Verhalten hinsichtlich des sichtbaren Bildes das Gleiche ... es wird dann aber die PIckBox and den übergeordnenten Container (SplitContainer.Panel2) angepasst, so dass der grüne Hintergrund nicht mehr sichtbar ist.

    Ich bin nach wie vor ratlos.

    LG
    Peter

    Peter329 schrieb:

    Ich bin nach wie vor ratlos.
    Dann poste mal Deinen Code.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich werde mal ein Beispiel Projekt machen.

    Ich habe das Gefühl, dass die Property .SizeMode bestimmt, wie die Picture Box behandelt wird ...

    Es müsste aber noch irgendwo eine Möglichkeit geben, dafür zu sorgen, dass das Bild der Bitmap so verkleinert wird, dass es in die bereitgestellte PictureBox hineinpasst ! Mir scheint, dass die PictureBox je nach Größe der Bitmap "aufgepustet" wird .

    Na ja, ich versuche die Verhältnisse mal an einem überschaubaren Testprojekt zu wiederholen ... und wenn das nicht hilft, dann stelle ich den Code hier ein.

    Vielen Dank für deine Mühe und einen schönen Tag wünscht

    Peter
    @Peter329 Du kannst ein Rectangle erstellen und das mit den Bilddaten ausmalen mittels Graphis.FromImage. Das Rechteck wird so groß, wie du willst. Du benutzt eine Variable Zoom (z.B. 1,05 für 105%); dann wird das Rechteck 1,05-Mal so groß wie das Originalbild. Jede Mausradbewegung erhöht / erniedrigt den Faktor um eine bestimmte Menge. Dieses neue Bild weist du der PictureBox zu. Wichtig ist auch die Auflösung. Sie muss genauso groß sein wie die Auflösung des Originalbildes. Schau nach SetResolution. Ich habe gerade meinen Code von früher gesucht. Wenn ich ihn wiederfinde, poste ich das Stück Code.

    Wenn du das so machst, wäre es auch möglich, mit gedrückter linker Maustaste das Rechteck (Bild) zu schieben

    Peter329 schrieb:

    Ich habe das Gefühl, dass die Property .SizeMode bestimmt, wie die Picture Box behandelt wird ...
    Hatten wir doch gerade.

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. PicPreview.SizeMode = PictureBoxSizeMode.Zoom
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Peter329 Ich habe ein neues Projekt für dich erstellt. Du brauchst nur einen Pfad anpassen. Das Bild lässt sich mit dem Mausrad zoomen und mit der gedrückten linken Maustaste bewegen. Die Pictureboxgröße wird für ein neues Bild an die ursprüngliche Bildgröße angepasst, damit das Bild im noch nicht gezoomtem und verschobenem Zustand nicht verzerrt wird.
    Dateien