Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    classe ridimensionamento immagini

    Ciao, scusa il disturbo volevo sapere se c'erano novità con la tua Classe C# per la gestione del ridimensionamento delle immagini :-)

    con che versione di Framework è fatta ?

    Ciao e grazie mille

    Bruce
    http://web.tiscali.it/archivio_esempi/zip/gdi.zip

    :quote: lì ho messo una dll, framework 2, da buttare dentro la directory bin. Non è un granchè, vedi se ti può servire.


    ps. a disposizione per chiarimenti e uso. In questo post, non in privato
    Pietro

  2. #2
    :-) ora che ho la dll come faccio a sapere i metodi implementati :-P
    _____________

    Bruce

    www.palestracft.it

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    non ho manuale. I metodi ti vengono elencati da visual studio quando usi la libreria.

    Un elenco è questo

    codice:
    public static Bitmap ImgLoad(string immagineInput, int timeoutMillisecondi)
    public static Bitmap ImgLoad(string immagineInput)
    public static Bitmap ImgLoad(HttpPostedFile immagineInput)
    public static Bitmap ImgLoad(Stream immagineInput)
    
    public static void ImgSaveToFile(Bitmap bmp, string immagineOutput, FormatoOutput formatoOutput, int compressione)
    public static void ImgSaveToFile(Bitmap bmp, string immagineOutput, FormatoOutput formatoOutput)
    public static void ImgSaveToFile(Bitmap bmp, string immagineOutput)
    
    public static void ImgSaveToResponseOutputStream(Bitmap bmp, FormatoOutput formatoOutput, int compressione)
    public static void ImgSaveToResponseOutputStream(Bitmap bmp, FormatoOutput formatoOutput)
    public static void ImgSaveToResponseOutputStream(Bitmap bmp)
    
    public static void ImgResize(ref Bitmap bmp, int width, int height, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare)
    public static void ImgResize(ref Bitmap bmp, int dimMax, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare)
    public static Bitmap ImgResize(string immagineInput, int width, int height, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare)
    public static Bitmap ImgResize(string immagineInput, int dimMax, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare)
    public static void ImgResize(ref Bitmap bmp, int dimMax, bool quality)
    public static Bitmap ImgResize(string immagineInput, int dimMax, bool quality)
    public static void ImgResize(ref Bitmap bmp, int dimMax)
    public static Bitmap ImgResize(string immagineInput, int dimMax)
    
    public static void ImgMerge(Bitmap immagineDaModificare, Bitmap logo, int x, int y, bool makeTransparent, double transparency)
    
    public static void ImgMettiTransparenza(Bitmap bmp, double transparency, Color coloreSottofondo)
    public static void ImgMettiTransparenza(ref Bitmap bmp, double transparency)
    
    public static void ImgClip(ref Bitmap bmpSource, Rectangle clip)
    
    public static void ImgClipCenter(ref Bitmap bmp, Rectangle clip, int contenitoreW, int contenitoreH, Color coloreSottofondo)
    public static void ImgClipCenter(ref Bitmap bmp, Rectangle clip, int contenitoreW, int contenitoreH)
    
    public static void ImgClipSquare(ref Bitmap bmp, int widthSquare)
    
    public static void ImgBorder(ref Bitmap bmp, int bordoPixel, Color coloreSottofondo)
    public static void ImgBorder(ref Bitmap bmp, int bordoPixel)
    
    public static void ImgFit(ref Bitmap bmp, int contenitoreW, int contenitoreH, Color coloreSottofondo, Boolean centrato, Boolean ingrandisciPerAdattare)
    public static void ImgFit(ref Bitmap bmp, int contenitoreW, int contenitoreH, Color coloreSottofondo, Boolean centrato)
    public static void ImgFit(ref Bitmap bmp, int contenitoreW, int contenitoreH, Color coloreSottofondo)
    public static void ImgFit(ref Bitmap bmp, int contenitoreW, int contenitoreH)
    
    public static void ImgClipRectangle(ref Bitmap bmp, int contenitoreW, int contenitoreH)
    
    public static SizeF ImgWriteText(Bitmap bmp, string testo, Brush colore, Font font, int x, int y)
    
    public static Bitmap ImgFromText(string testo, Color coloreSottofondo, Brush colore, Font font)
    
    public static SizeF ImgGetSizeFromText(Bitmap bmp, string testo, Font font)
    
    public static Bitmap ImgGradienteLineare(int width, int height, Color coloreSottofondo, Color coloreInizio, Color coloreFine, System.Drawing.Drawing2D.LinearGradientMode linearGradientMode, System.Drawing.Drawing2D.Blend blend)
    public static Bitmap ImgGradienteLineare(int width, int height, Color coloreSottofondo, Color coloreInizio, Color coloreFine, System.Drawing.Drawing2D.LinearGradientMode linearGradientMode)
    
    public static void ImgConvertPerceptiveMatrix(System.Drawing.Bitmap bitmap)
    
    public static void ImgConvertNegativeMatrix(System.Drawing.Bitmap bitmap)
    
    public static void ImgRotate(ref Bitmap bmp, double angolo, Color coloreSottofondo)
    
    public static void ImgRotate(ref Bitmap bmp, Ribaltamento ribaltamento)
    come vedi ci sono molte versioni di overload. Però, sostanzialmente uso:

    1) leggo l'immagine: ImgLoad

    2) manipolo l'immagine, resize o altro: ImgResize

    3) salvo o su disco o su stream: ImgSaveToFile o ImgSaveToResponseOutputStream



    per farti un esempio banale, nella pagina ho:
    [img]a.aspx?p_img=1[/img]


    nel codice ho:

    codice:
    Option Strict On
    
    Imports j = gdi.img
    Imports System.Drawing
    Imports System.Drawing.Bitmap
    Imports System.Drawing.Imaging
    
    Partial Class archivio_prove_gdi_a
        Inherits System.Web.UI.Page
    
        Const name As String = "http://www.xgate.kz/Autonews/alfa%20romeo%20156%20gta.jpg"
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim p_img As String = Me.Request.QueryString("p_img")
    
            Select Case p_img
                Case "1"
                    returnImg1()
                Case "2"
                    returnImg2()
            End Select
        End Sub
    
    
        Private Sub returnImg1()
            'procedure complete
            Dim bmp As Bitmap = j.ImgLoad(name)
            j.ImgResize(bmp, 300)
            j.ImgSaveToResponseOutputStream(bmp)
        End Sub
    
        Private Sub returnImg2()
            'procedura semplificata
            j.ImgResizeAndSaveToResponseOutputStream(name, 300)
        End Sub
    
    
    End Class
    
    
    sono qui per qualunque cosa. Ciao :ciauz:
    è in basic, ma non avrai problemi a tradurre, per qualunque altra cosa sono qui
    Pietro

  4. #4
    :master:
    ho un paio di problemi ... io uso c# ...

    allora il mio problema è prendere un'immagine ridimensionarla, e metterci il bordino intorno.

    Il ridimensionamento l'ho già fatto con un altra dll e per ora posso usare quella, per aggiungere il bordino ho fatto così:

    codice:
    Color c1 = Color.FromArgb(32,178,170);
    			
    int W = 220;
    int H = 290;
    			
    Bitmap bmp = gdi.img.ImgLoad(destinazione+strFileName);
    gdi.img.ImgFit(bmp,W,H,c1,true);
    manca ancora la scrittura su file che non l'ho fatta perché mi si pianta già così

    codice:
    The best overloaded method match for 'gdi.img.ImgFit(ref System.Drawing.Bitmap, int, int)' has some invalid arguments
    sulla riga
    gdi.img.ImgFit(bmp,W,H,c1,true);


    dove sbaglio ?

    Ciao e grazie mille ...

    Bruce
    _____________

    Bruce

    www.palestracft.it

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    allora, visto che non ho manuale nè esempi, l'unico modo che mi viene in mente è quello di dire cosa vuoi così faccio l'esempio. Perciò, in base a quello che mi hai detto ti ho fatto questo esempio molto semplificato.
    Leggo una immagine da remoto, la ridimensiono, la bordo con un bordo nero di 10px, la salvo su disco, la salvo nello stream di uscita:

    pagina
    codice:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="a.aspx.cs" Inherits="prove_a" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Pagina senza titolo</title>
    </head>
    <body>
        <form id="form1" runat="server">
            [img]a.aspx?p_img=1[/img]
       </form>
    </body>
    </html>
    codice
    codice:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Drawing;
    using System.Drawing.Text;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;
    
    using j = gdi.img;
    
    public partial class prove_a : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string p_img = this.Request.QueryString["p_img"];
            if (p_img != null && p_img == "1")
                Sub1();
        }
    
        private void Sub1()
        {
    
            const int bordo = 10; //spessore del bordo
            const int dimMax = 600; //dimensione max dell'immaine
            
            //'-----------------------------------------------------------------------------------------
            //'restituisce una bmp letta da file o da remoto
            //'se immagineInput inizia per "http://" l'immagine si presume debba essere letta da remoto;
            //'se contiene : come c:\immagine.jpg si presume un percorso fisico
            //'altrimenti si presume un percorso virtuale
            //'-----------------------------------------------------------------------------------------
            
            //---------------------------------------------------------------
            //LEGGO IMMAGINE DA REMOTO O DA DISCO, PERCORSO VIRTUALE O FISICO
            //---------------------------------------------------------------
            Bitmap bmp = j.ImgLoad(@"http://web.tiscali.it/archivio_esempi/immagini/v.jpg");
    
    
    
            /*--------------------------------------------------------------------------------------------------------------------------------------------------------
             * Serve per ridimensionare immagini
             * se width e height sono > 0, l'immagine viene ridimensionata
             * porre width e height = -1 o 0 per non ridimensionare l'immagine
             * se specifico width e height vengono usati questi valori e l'immagine può essere deformata
             * se specifico whidth e height = 0, o viceversa, vengono rispettati i rapporti w/h
             * interpolazione: se InterpolationMode.Invalid, viene usato il predefinito
             * ingrandisciPerAdattare: vero=ingrandisce l'immagine per adattarla alle dimensioni
             * -------------------------------------------------------------------------------------------------------------------------------------------------------*/
    
            //-----------------------------------------------------------------------------
            //dimensione max = 500px, interpolazione bicubica, non ingrandisce per adattare
            //-----------------------------------------------------------------------------
            j.ImgResize(ref bmp, dimMax - bordo - bordo);
    
            //--------------------
            //CI SCRIVO QUALCOSA
            //--------------------
            j.ImgWriteText(bmp, "Gairo", Brushes.Coral, new Font("Arial", 12), 10, 280);
    
            //-----------------------------------------------
            //metto un bordo nero di 10 px
            //-----------------------------------------------
            j.ImgBorder(ref bmp, bordo, Color.Black);
    
    
            //---------------------------------------------------------------
            //salvo su file in formato jpg, compressione standare predefinita
            //---------------------------------------------------------------
            j.ImgSaveToFile(bmp, @"c:\tmp\gairo1.jpg");//non viene fatto il dispose
            
            //-----------------------------
            //salvo nello stream di uscita
            //-----------------------------
            j.ImgSaveToResponseOutputStream(bmp);//viene fatto il dispose
    
    
            
        }
    
    
    }


    Qualche notizia:

    la procedura di load, legge da remoto, da disco percorso fisico e da disco percorso virtuale e da upload (HttpPostedFile)


    tutte le procedure hanno diverse versioni in overload, quelle con tutti i parametri hanno tutte le possibilità, le altre usano impostazioni predefinite, più usate. Per esempio, anche se ho la possibilità di salvare a bassa o olta qualità, nel formato che voglio, e con la compressione che voglio, in genere io voglio salvare ad alta qualità, in formato jpg e con compressione predefinita di 0.7
    Quando ridimensiono posso impostare la larghezza e l'altezza, ma credo che a pochi interessi ridimensionare distorcendo l'immagine; perciò la versione con pochi parametri salva con la dimensione max voluta senza distorcere.



    imgFit serve a questo:
    imposti un quadrato o un rettangolo e l'immagine viene ridimensionata e adattata al contenitore.

    ImgMerge fonde immagini, per esempio puoi aggiungere un logo all'immagine impostando pure la trasparenza.

    puoi scrivere su una immagine con ImgWriteText

    ImgClipRectangle, ridimensiona una immagine, adattandola ad un contenitore rettangolare o quadrato eliminando le parti eccedenti
    Pietro

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    qui c'è un altro esempio.

    Leggo l'immagine da disco: nota che è sempre la stessa procedura.

    La ridimensiono a 600px

    La bordo con un bordo di 10px nero

    Ci scrivo qualcosa.

    Scrivo RISERVATO tipo filigrana al centro, ruotato di 45°: nota il merge di due immagini


    Esempio di salvataggio su disco

    Esempio di salvataggio su stream in formato png

    codice:
    private void Sub1()
    {
    
    	const int bordo = 10; //spessore del bordo
    	const int dimMax = 600; //dimensione max dell'immaine
    
    
    	//---------------------------------------------------------------
    	//LEGGO IMMAGINE DA REMOTO O DA DISCO, PERCORSO VIRTUALE O FISICO
    	//---------------------------------------------------------------
    	Bitmap bmp = j.ImgLoad(@"/ProveNicon/h.jpg");
    
    
    	//-----------------------------------------------------------------------------
    	//dimensione max = 600px, interpolazione bicubica, non ingrandisce per adattare
    	//-----------------------------------------------------------------------------
    	j.ImgResize(ref bmp, dimMax - bordo - bordo);
    
    	//--------------------
    	//CI SCRIVO QUALCOSA
    	//--------------------
    	string testo = "Gairo";
    	Font fn = new Font("Arial", 10, FontStyle.Regular, GraphicsUnit.Point);
    	SizeF sf = j.ImgGetSizeFromText(bmp, testo, fn);
    	j.ImgWriteText(bmp, testo, Brushes.Coral, fn, 10, bmp.Height - (int)sf.Height);
    
    
    	//-----------------------------------------------
    	//metto un bordo nero di 10 px
    	//-----------------------------------------------
    	j.ImgBorder(ref bmp, bordo, Color.Black);
    
    
    	//--------------------------------------------------------------------------------------
    	//metto la scritta "RISERVATO" al centro dell'immagine, ruotata di 45°, semitrasparente
    	//--------------------------------------------------------------------------------------
    	Bitmap bmp1 = j.ImgFromText("RISERVATO", Color.Transparent, new SolidBrush(Color.FromArgb(255, 170, 170, 170)), new Font("Courier New", 48, FontStyle.Bold, GraphicsUnit.Point));
    	j.ImgRotate(ref bmp1, 45, Color.Transparent);
    	j.ImgMerge(bmp, bmp1, (int)((bmp.Width - bmp1.Width) / 2.0), (int)((bmp.Height - bmp1.Height) / 2.0), false, 1.0);
    	bmp1.Dispose();
    
    
    
    	//---------------------------------------------------------------
    	//salvo su file in formato jpg, compressione standare predefinita
    	//---------------------------------------------------------------
    	j.ImgSaveToFile(bmp, @"c:\tmp\gairo1.jpg");//non viene fatto il dispose
    
    	//-------------------------------------------
    	//salvo nello stream di uscita in formato png
    	//-------------------------------------------
    	j.ImgSaveToResponseOutputStream(bmp, gdi.img.FormatoOutput.png);//viene fatto il dispose
    
    
    
    }
    Pietro

  7. #7
    Ciao grazie mille per gli esempi ... alla fine il problema era che non avevo messo

    codice:
    ref
    ma a cosa serve

    Ciao e grazie mille

    Bruce
    _____________

    Bruce

    www.palestracft.it

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ebbene, prima di tutto sappi che mi farebbe piacere sapere se ti funziona.

    Per il ref la faccenda è questa:

    quando si legge una immagine, bisogna fare sempre il dispose, altrimenti l'immagine non si può più toccare, nè rinominare, nè cancellare perchè è sempre in uso dal sistema.

    Allora, per esempio, la procedura di resize, legge una immagine, crea la miniatura, fa il dispose dell'immagine letta, sostituisce il vecchio riferimento col riferimento della miniatura.

    Per fare questo, la variabile deve essere passata per riferimento e non per valore, altrimenti non funziona.

    ps. se ti serve altro sono qui
    Pietro

  9. #9
    Originariamente inviato da pietro09
    Ebbene, prima di tutto sappi che mi farebbe piacere sapere se ti funziona.
    Scusa ma l'avevo dato per scontato :-D Sì sì funziona ... resize ... bordo a rimpire lo spazio a disposizione e salvataggio ...

    Per il ref la faccenda è questa:

    quando si legge una immagine, bisogna fare sempre il dispose, altrimenti l'immagine non si può più toccare, nè rinominare, nè cancellare perchè è sempre in uso dal sistema.

    Allora, per esempio, la procedura di resize, legge una immagine, crea la miniatura, fa il dispose dell'immagine letta, sostituisce il vecchio riferimento col riferimento della miniatura.

    Per fare questo, la variabile deve essere passata per riferimento e non per valore, altrimenti non funziona.

    ps. se ti serve altro sono qui
    Grazie mille per la spiegazione ... di asp.net ne so poco :-) il sito che sto facendo è tutto in asp ... ho dovuto fare questa parte col .Net perché se no non sapevo come fare :-D

    GRAZIEeeeeeeeeeeeeeee
    _____________

    Bruce

    www.palestracft.it

  10. #10
    Ciao, scusa se rompo ancora :-D

    Dovrei ridimensionare delle immagini png a 24 bit con trasparenza alpha, solo che l'immagine ridimensionata non ha più la trasparenza... come si f a?

    io faccio così ma è sbagliato ...

    codice:
    gdi.img.ImgFit(ref bmp,width,height);
    gdi.img.ImgSaveToResponseOutputStream(bmp,gdi.img.FormatoOutput.png,90);
    Nella lista delle function ho visto che c'è un ImgMettiTrasparenza, ma non penso che sia quello che mi serve ...

    Ciao e grazie ...

    Bruce
    _____________

    Bruce

    www.palestracft.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.