Newsgroup: it.comp.lang.visual-basic
Titolo: Dimensione Immagini

Ciao a tutti, quando carico un'immagine in un Image, vorrei che l'immagine 
non superi una determinata dimensione e se la supera ridimensionarla....come 
si fa? 

 si fa? 
Nel controllo "Image", devi settare la proprietà "Stretch" su true.
In questo modo le immagini troppo grandi vengono rimpicciolite,
mentre quelle troppo piccole vengono ingrandite.
Uno svantaggio è che, in questo caso, le proporzioni non vengono 
mantenute in automatico.
Cioè se tu imposti il controllo, ad esempio, nelle proporzioni 4:3 
mentre l'immagine che ci vai ad inserire è 16:9 quest'ultima ti verrà 
deformata.
Una soluzione sarebbe quella di "proporzionare" il controllo prima di 
caricare l'immagine, acquisendo le sue dimensioni,
oppure -ma è meno elegante- carichi l'immagine in un secondo controllo 
nascosto, poi ridimensioni il primo in base alle proporzioni di quello 
nascosto.
ciao
stefano


VB6 o NET ?
Se si tratta di VB6 e stai usando il controllo image basta mettere la 
proprietà stretch = true e l'immagine caricata si adeguerà alle 
dimensioni del controllo.
Attenzione perché questo non mantiene le proporzioni dell'immagine.
Se si tratta di .NET non ne so nulla.
-- 
-> GbC|
www.gbcweb.com
www.chiappori.com
 

 stefano
siccome io devo poi salvarla in un'altra cartella(non so come) vorrei 
risalvarla nelle dimensioni giuste...
io tramite il comando Image1.width e Image1.Height non li posso settare? 

 io tramite il comando Image1.width e Image1.Height non li posso settare? 
Si certo, li puoi settare di volta in volta come ti servono.
ciao
stefano

 stefano
Si ma il problema è che lui usa i Twip a me servono i Pixel....come faccio?
Ciao
Luca 

 Si ma il problema è che lui usa i Twip a me servono i Pixel....come faccio?
Screen.TwipsPerPixelX
Screen.TwipsPerPixelY
ciao
stefano

 Screen.TwipsPerPixelY
e che fanno? potresti spiegarmele per favore?
Grazie
luca 

 e che fanno? potresti spiegarmele per favore?
Suvvia un po' di iniziativa.
Basta usare l'help in linea oppure cercare su google.
ciao
stefano

 io tramite il comando Image1.width e Image1.Height non li posso settare?
Attenzione: se sei con VB non puoi salvare in JPG, tantomeno
a dimensioni diverse da quelle originali. Puoi farlo in BMP, ma
i file occuperanno una marea di spazio in piů.
Se ti serve per forza il JPG devi usare componenti di terze parti,
ce ne sono anche gratuiti. Fruga nei post vecchi con Google,
o sul Sito Comune di questo gruppo.
Bye, G. 

Chi ha detto che servono componenti di terze parti per salvare in formato
jpg?
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type
Private Type GdiplusStartupInput
    GdiplusVersion As Long
    DebugEventCallback As Long
    SuppressBackgroundThread As Long
    SuppressExternalCodecs As Long
End Type
Private Type EncoderParameter
    GUID As GUID
    NumberOfValues As Long
    type As Long
    Value As Long
End Type
Private Type EncoderParameters
    Count As Long
    Parameter As EncoderParameter
End Type
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As
Any, src As Any, ByVal cb As Long)
Private Declare Function GdiplusStartup Lib "gdiplus" (token As Long,
inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As
Long
Private Declare Function GdipReleaseDC Lib "gdiplus" (ByVal graphics As
Long, ByVal hDC As Long) As Long
Private Declare Function GdipDeleteGraphics Lib "gdiplus" (ByVal graphics As
Long) As Long
Private Declare Function GdipDrawImage Lib "gdiplus" (ByVal graphics As
Long, ByVal image As Long, ByVal x As Single, ByVal Y As Single) As Long
Private Declare Function GdipDrawImageRectI Lib "gdiplus" (ByVal pgraphics
As Long, ByVal pimage As Long, ByVal x As Long, ByVal Y As Long, ByVal Width
As Long, ByVal Height As Long) As Long
Private Declare Function GdipCreateFromHDC Lib "gdiplus" (ByVal hDC As Long,
ByRef graphics As Long) As Long
Private Declare Function GdipLoadImageFromStream Lib "gdiplus" (ByVal
pStream As IUnknown, ByRef rimage As Long) As Long
Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As
Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As
Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As
Long
Private Declare Function GdipSaveImageToStream Lib "gdiplus" (ByVal image As
Long, ByVal pStream As IUnknown, clsidEncoder As GUID, encoderParams As Any)
As Long
Private Declare Function GetHGlobalFromStream Lib "ole32" (ByVal ppStream As
IUnknown, hGlobal As Any) As Long
Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByRef hGlobal As
Any, ByVal fDeleteOnRelease As Long, ByRef ppStream As IUnknown) As Long
Private Declare Function GdiplusShutdown Lib "gdiplus" (ByVal token As Long)
As Long
Private Declare Function GdipCreateBitmapFromHBITMAP Lib "gdiplus" (ByVal
hbm As Long, ByVal hpal As Long, bitmap As Long) As Long
Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As
Long) As Long
Private Declare Function GdipSaveImageToFile Lib "gdiplus" (ByVal image As
Long, ByVal FileName As Long, clsidEncoder As GUID, encoderParams As Any) As
Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id
As GUID) As Long
Private Declare Function GdipLoadImageFromFile Lib "gdiplus" (FileName As
String, image As Long) As Long
Private Declare Function GdipGetImageDimension Lib "gdiplus" (image As Long,
Width As Single, Height As Single) As Long
Private iImageStream As IUnknown, lBitmap As Long, lGDIP As Long
Private Sub Command1_Click()
    SaveJPGStream Picture1.Picture, "c:\prova.jpg", 100
End Sub
'**************************************************************
'* Funzione che consente di salvare in formato JPG via codice *
'**************************************************************
Public Function SaveJPGStream(ByVal Pict As StdPicture, ByVal FileName As
String, ByVal Quality As Byte) As String
    Dim tSI As GdiplusStartupInput, lRes As Long, StringImage As String
    Dim tJpgEncoder As GUID, tParams As EncoderParameters, lSize As Long
    Dim hGlobal As Long, lPtr As Long, aBytes() As Byte
    On Error Resume Next
    tSI.GdiplusVersion = 1
    lRes = GdiplusStartup(lGDIP, tSI)
    If lRes = 0 Then
        lRes = GdipCreateBitmapFromHBITMAP(Pict.Handle, 0, lBitmap)
        If lRes = 0 Then
            CLSIDFromString
StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), tJpgEncoder
            tParams.Count = 1
            With tParams.Parameter
                CLSIDFromString
StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), .GUID
                .NumberOfValues = 1
                .type = 4
                .Value = VarPtr(Quality)
            End With
            lRes = CreateStreamOnHGlobal(ByVal 0, True, iImageStream)
            lRes = GdipSaveImageToStream(lBitmap, iImageStream, tJpgEncoder,
tParams)
            If GetHGlobalFromStream(iImageStream, hGlobal) = 0 Then
                lSize = GlobalSize(hGlobal)
                lPtr = GlobalLock(hGlobal)
                If lPtr Then
                    ReDim aBytes(0 To lSize - 1)
                    MoveMemory aBytes(0), ByVal lPtr, lSize
                    StringImage = StrConv(aBytes, vbUnicode)
                End If
                GlobalUnlock hGlobal
            End If
            Set iImageStream = Nothing
            If lBitmap Then GdipDisposeImage lBitmap
        End If
        If lGDIP Then GdiplusShutdown lGDIP
    End If
    If StringImage <> "" Then
        ff = FreeFile
        Open FileName For Output As #ff
            Print #ff, StringImage
        Close #ff
    End If
End Function
--
Ciao Fede
By Chicco Production
http://www.webalice.it/bychicco/

Ridimensionamento immagini tramite GDI32: StretchBlt e SetStretchBltMode
http://tinyurl.com/2j89e7


 
http://tinyurl.com/2j89e7
Basta anche .PaintPicture, che è un wrapper della StretchBlt.
La qualità non è ottimale, l'unico tipo di ridimensionamento
supportato è il NearestNeighbor. Il SetStretchBltMode ha l'effetto
di sfuocare leggermente l'imagine ridimensionata e diminuirne
leggermente la saturazione per rendere meno visibili gli inevitabili
artefatti di ridimensionamento. Personalmente non mi piace molto,
ma può avere i suoi usi.
Per ottenere qualcosa di meglio si può lavorare con la GDIplus
citata nell'altro post per settare l'Interpolation Mode prima di fare
una DrawImage, ma non è un lavoretto per deboli di cuore, e io
ho altro da fare, in questo periodo, per mettermi a smanettare.
E poi mi pare di aver capito che in .NET sia roba nativa :-).
Bye, G. 

 jpg?
Vedo che se ti si pizzica ti smuovi :-)
In effetti hai ragione, ho sbagliato il termine, avrei dovuto dire
componenti esterni, nel senso di /non nativi di VB/.
[e tanto per precisare ancora, sul Sito Comune c'è addirittura un
codice dimostrativo di come scrivere un JPEG completamente
da codice: tecnicamente funziona, ma la qualità della compressione,
per usare un eufemismo, non è delle migliori].
Tanto per completare le informazioni, GdiPlus è un wrapper
esteso della GDI standard, che la MS ha distribuito all'incirca
nel 2001.
Altro codice, particolarmente pulito, qui:
http://www.codyx.org/snippet_conversion-images-bmp-jpg-png-avec-gdi_160.aspx
Ah: la GDI+ adesso gestisce anche il TIFF, secondo le specifiche,
e in questo codice non è supportato.
Bye, G. 


http://www.codyx.org/snippet_conversion-images-bmp-jpg-png-avec-gdi_160.aspx
Grazie per l'informazione gli dņ subito un'occhiata...
