Minulla olisi PictureBox isomman PictureBoxin sisällä.
Tässä pienemmässä PictureBoxissa on AutoSize, ja se mukautuu kuvakoon mukaan.
Ongelmia tulee kun tämä pienempi laatikko suurentuu yli isomman rajojen, ja kuvasta näkyy vain keskikohta.
—
Tarkoitus olisi saada kuvalaatikon suureneminen pysähtymään kun se on isompaa isompi tai samankokoinen (If (PictureBox1.Size > PictureBox2.Size Then blah) tyyliin).
Mutta ongelmia tuottaa se, että kuva pitäisi siististi saada pysymään kokonaisena sen pysäytetyn PictureBoxin sisällä.
Kuva pitäisi skaalata pieneen, thumbnail muotoon ja alempana labelissa näkyisi kuvakoko ja prosenttikoko, jos kuvaa on pienennetty sopiviin mittoihin.
—
Hieman vaikeaa on myös se, että VB6 katsoo pictureboxin koon eri yksikköna kuin pikseli.
Tämä onnistuu jotekin vbPixel funktiolla, tietäisi vain miten.
—
Lyhyesti: Kuvakokoa pitäisi muttaa ja muutokset pitäisi saada näkymään alempana.
entäs jos vain tutkit sen kuvan lataamisen jälkeen onko se pienempi boksi ylittänyt suuremman koon, jos on, niin lataatkin se imageen jonka säädät sen "suuremman" kokoiseksi ja laitat stretch:in trueksi.
kuvakoko löytynee seuraavaan tyyliin:
Dim x As Integer Dim y As Integer Picture1.BorderStyle = 0 x = CInt(Picture1.Width / Screen.TwipsPerPixelX) y = CInt(Picture1.Height / Screen.TwipsPerPixelY) Label1.Text = "x: " & CStr(x) & "y: " & CStr(y)
Tuplanolla kirjoitti:
Hieman vaikeaa on myös se, että VB6 katsoo pictureboxin koon eri yksikköna kuin pikseli.
Vaihda lomakkeen ScaleMode-ominaisuus kolmoseksi ("Pixels").
Pitääkö kuvasuhteen säilyä ennallaan? Jos korkeus tai leveys ylittyy, voit pienentää kuvan PaintPicture-metodilla, jossa määräät piirrettävän alueen korkeuden ja leveyden isomman boxin mukaiseksi.
Kokeilin oheisella koodilla. pic1 on se isompi boxi. pic2:n AutoRedraw = True.
Dim h As Integer, w As Integer Dim hh As Integer, ww As Integer Private Sub Form_Load() Me.Show h = pic1.ScaleHeight w = pic1.ScaleWidth pic2.Picture = LoadPicture(App.Path & "\lintu2.jpg") DoEvents If pic2.Width > w Or pic2.Height > h Then pic2.Left = 0 pic2.Top = 0 If pic2.Width / w > pic2.Height / h Then ww = w hh = pic2.Height * w / pic2.Width Else hh = h ww = pic2.Width * h / pic2.Height End If pic2.PaintPicture pic2.Picture, 0, 0, ww, hh pic2.Width = ww pic2.Height = hh Else pic2.Left = (w - pic2.Width) / 2 pic2.Top = (h - pic2.Height) / 2 End If End Sub
Blaze kirjoitti:
Tuplanolla kirjoitti:
Hieman vaikeaa on myös se, että VB6 katsoo pictureboxin koon eri yksikköna kuin pikseli.
Vaihda lomakkeen ScaleMode-ominaisuus kolmoseksi ("Pixels").
Pilasi koko jutun.
Sain kuvan aiemmin keskelle PictureBox objektia mutta nyt se meni minne sattui.
—
Ja toimiiko esakomin vaihtoehto niin, että se kuvan suhde pysyy samana vaikka kuva mahdutetaan pieneen tilaan ja kuvan koon muutoksen prosentin saa näkyviin (zoomattu koko).
—
Tässä niiden kahden formin lähdekoodit:
VERSION 5.00 Begin VB.Form browseinputform BorderStyle = 1 'Fixed Single Caption = "Input Image" ClientHeight = 3255 ClientLeft = 45 ClientTop = 435 ClientWidth = 2175 Icon = "browseinputform.frx":0000 LinkTopic = "sprguiform" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 3255 ScaleWidth = 2175 StartUpPosition = 2 'CenterScreen Begin VB.Frame frameinput Caption = "Input Image (Bitmap)" Height = 2655 Left = 120 TabIndex = 1 Top = 120 Width = 1935 Begin VB.CheckBox inputpreview Caption = "Show Preview" Height = 255 Left = 120 TabIndex = 3 Top = 2280 Width = 1695 End Begin VB.FileListBox inputfile Height = 2040 Left = 120 Pattern = "*.bmp" TabIndex = 2 Top = 240 Width = 1695 End End Begin VB.CommandButton inputload Caption = "Load" Height = 255 Left = 120 TabIndex = 0 Top = 2880 Width = 1935 End End Attribute VB_Name = "browseinputform" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Private Sub Form_Unload(Cancel As Integer) Unload inputpreviewform End Sub Private Sub inputfile_Click() If (inputpreview.Value = 1) Then inputpreviewform.previewpic2.Picture = LoadPicture(App.Path & "\" & inputfile.FileName) inputpreviewform.previewpic2.Left = inputpreviewform.previewpic.Width / 2 - inputpreviewform.previewpic2.Width / 2 inputpreviewform.previewpic2.Top = inputpreviewform.previewpic.Height / 2 - inputpreviewform.previewpic2.Height / 2 inputpreviewform.previewtext.Caption = inputpreviewform.previewpic2.Picture.Width & "×" & inputpreviewform.previewpic2.Picture.Height End If End Sub Private Sub inputfile_DblClick() sprguiform.inputbmp.Text = inputfile.FileName Unload Me End Sub Private Sub inputload_Click() sprguiform.inputbmp.Text = inputfile.FileName Unload Me End Sub Private Sub inputpreview_Click() On Error GoTo previewerror If (inputpreview.Value = 1) Then Load inputpreviewform inputpreviewform.Show inputpreviewform.Left = browseinputform.Left inputpreviewform.Left = inputpreviewform.Left + browseinputform.Width inputpreviewform.previewpic2.Picture = LoadPicture(App.Path & "\" & inputfile.FileName) inputpreviewform.previewpic2.Left = inputpreviewform.previewpic.Width / 2 - inputpreviewform.previewpic2.Width / 2 inputpreviewform.previewpic2.Top = inputpreviewform.previewpic.Height / 2 - inputpreviewform.previewpic2.Height / 2 inputpreviewform.previewtext.Caption = inputpreviewform.previewpic2.Picture.Width & "×" & inputpreviewform.previewpic2.Picture.Height Else Unload inputpreviewform End If previewerror: Exit Sub End Sub
VERSION 5.00 Begin VB.Form inputpreviewform BorderStyle = 4 'Fixed ToolWindow Caption = "Input Image Preview" ClientHeight = 3615 ClientLeft = 5910 ClientTop = 4170 ClientWidth = 3255 Icon = "inputpreviewform.frx":0000 LinkTopic = "sprguiform" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 3615 ScaleWidth = 3255 ShowInTaskbar = 0 'False StartUpPosition = 2 'CenterScreen Begin VB.PictureBox previewpic Height = 3255 Left = 0 ScaleHeight = 3195 ScaleWidth = 3195 TabIndex = 0 Top = 0 Width = 3255 Begin VB.PictureBox previewpic2 AutoSize = -1 'True Height = 135 Left = 1560 ScaleHeight = 75 ScaleWidth = 75 TabIndex = 1 Top = 1560 Width = 135 End End Begin VB.Label previewtext Height = 255 Left = 120 TabIndex = 2 Top = 3360 Width = 3135 End End Attribute VB_Name = "inputpreviewform" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False
Aihe on jo aika vanha, joten et voi enää vastata siihen.