Změna velikosti Image v PictureBoxu   zodpovězená otázka

VB.NET, Komponenty, Grafika

Zdravím,

dnes jsem se asi hodinu a půl marně pokoušel přijít na to, jak bych mohl změnit velikost obrázku v pictureboxu. Jelikož jsou vlastnosti Image width a height read-only, vyhořel jsem. Pak jsem se asi hodinu pokoušel udělat to nějak přes Graphics, ale také nic.

Děkuji za odpověď

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zkuste, zda vám nenapoví nastavení PictureBoxSizeMode.StretchImage:

  Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
      PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    End Sub

    Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
      If e.Button = Windows.Forms.MouseButtons.Left Then
        PictureBox1.Width = PictureBox1.Width * 1.25
        PictureBox1.Height = PictureBox1.Height * 1.25
      Else
        PictureBox1.Width = PictureBox1.Width * 0.75
        PictureBox1.Height = PictureBox1.Height * 0.75
      End If

    End Sub
  End Class

Kliknutím levým tl. myši do formuláře se picture box a s ním i obrázek zvětší, kliknutím pravým tl. zmenší…

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Je to myšleno dobře, však jinak něž potřebuji. Já mám SizeMode obrázku nastaven na Zoom. A potřebuji aby se mi měnily rozměry Image a ne PictureBoxu.

I tak Vám děkuji.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

A k čemu PictureBox slouží? Způsob, který jste dělal bez něho přes Graphics, jde. Kód máte v "Rozdělění obrázku na několik Bitmap". Zdrojový obdélník bude mít velikost originálu obrázku, cílový obdélník pak jeho nový požadovaný rozměr.

Myslím, že změna velikosti obrázku, o kterou se snažíte v PictureBox, je v rozporu s nastavením SizeMode na Zoom

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

No tak stačí nastavit StretchImage a pak zvětšovat rozměry PictureBoxu. A pokud chcete scrollovat, umístěte PictureBox do Panelu, kterému nastavte AutoScroll na True.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ale já potřebuji, abych měl Image, který načtu ze souboru. Ten pak mohu předimenzovat a znovu zobrazit v PictureBoxu. V "Rozdělění obrázku na několik Bitmap" je vysvětleno, jak můžu kousky obrázku vykreslit na formulář, ale já je potřebuji změnit na Image a promítnout do PictureBoxu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Je to proto, že potřebuji Image se změněnými rozměry pak použít i jinam než jen zobrazit do pictureBoxu. Ale ne s původními rozměry, však s těmi novými.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vážený příteli,

asi dost dobře nechápu, o co Vám přesně jde-pokud máte picturebox nastaven na ZOOM, pak i když změníte velikost původního obrázku, při zobrazení to bude (až na kvalitu) vypadat přece vždy stejně - obrázek se zvětší na maximální rozměr, který nedeformovaný do pictBoxu vleze.

Ale jinak, pokud Vám jde o změnu velikosti bitmapy ("převzorkování"), pak to můžete udělat celkem pohodlně přes graphics (pokud k tomu neexistuje nějaká jiná speciální metoda).

Nevím, jestli je to to, co potřebujete, ale zkuste třeba:

Public Class Form1
    
    Dim obrazek1 As New Bitmap("d:\obr2.jpg")
    Dim obrazek As New Bitmap(200, 150, obrazek1.PixelFormat)

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.PictureBox1.Image = obrazek1
    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim g As Graphics = Graphics.FromImage(obrazek)
        g.DrawImage(obrazek1, New Rectangle(0, 0, obrazek.Width, obrazek.Height), New Rectangle(0, 0, obrazek1.Width, obrazek1.Height), GraphicsUnit.Pixel)
        Me.PictureBox1.Image = obrazek
    End Sub
End Class

Samozřejmě, ten pixturebox musíte mít nastaven sizemode=normal, jinak změnu neuvidíte.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Aha, já už asi vím čím to bylo. Totiž já jak mám nastaven SizeMode na Zoom, tak ta změna nebyla vidět. Ale abych vysvětlil můj původní záměr:

Mám aplikaci, která zobrazuje obrázky (má to hlubší smysl, ale to je zbytečné vysvětlovat) a já mám PictureBox a WebBrowser. V Tom PictureBoxu mám sm Zoom at. Když změní NumericUpDown který kontroluje Width, v HTML dokumenty se mi obrázek s indexem jedna předimenzuje a v PictureBoxu také. Ale v PictureBoxu to nebude vidět. Ale předimenzuje se. V HTML by to být vidět mělo, ale já udělal tu chybu, že jsem sice upravil graphics toho obrázku, ale pak jsem ho již znovu nevykreslil.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback