Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100

    [c#] aggiungere un bordo ad un'immagine

    salve

    carico un'immagine tramite
    RectangleF rectF = new RectangleF(xpos, ypos, width, height);
    Bitmap pic = new Bitmap(Server.MapPath(path_immagini + immagine));
    Graphics g = Graphics.FromImage(pic);
    e dopo averla manipolata in diversi modi la restituisco tramite
    Response.ContentType = "image/jpeg";
    pic.Save(Response.OutputStream, ImageFormat.Jpeg);

    prima di restituire l'immagine però vorrei creare un bordo bianco di 20px nella parte superiore, dove poi andrei a scrivere un testo, ma come si fa?

    e a che ci sono... è possibile specificare il livello di compressione dell'immagine jpg?

  2. #2
    Per quello che riguarda il primo quesito, la soluzione è molto semplice.
    Il metodo FillRectangle ti consente di aggiungere quello che tu hai definito il "bordo bianco", mentre il testo lo aggiungi avvalendoti del metodo DrawString.

    La faccenda si complica per la compressione.
    Devi utilizzare un altro overload del metodo Save.
    Devi inoltre recuperare la struttura ImageCodecInfo relativa al MIME Type.
    Sfortunatamente, per fare ciò devi enumerare tutti gli image encoders e trovare quello corrispondente al MIME Type.
    Ti mostro un pò di codice:

    codice:
    public void BuildImage(string sourcePath, string destPath, string mimeType)
    {
        Bitmap bitmap = new Bitmap(sourcePath);
        Graphics graphic = Graphics.FromImage(bitmap);
    
        // Creo il rettangolo che conterrà il testo
        graphic.FillRectangle(new SolidBrush(Color.White), 0, 0, bitmap.Width, 10);
    
        // Creo il testo all'interno del rettangolo
        graphic.DrawString("Sample Text", new Font(FontFamily.GenericSerif, 6), new SolidBrush(Color.Black), 0, 0);
    
        // Compressione 40:1
        EncoderParameters encoderParams = new EncoderParameters(1);
        System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.Quality;
        EncoderParameter paramRatio = new EncoderParameter(encoder, 40L);
        encoderParams.Param[0] = paramRatio;
    
        // Per salvare l'immagine, nel caso della compressione, devi utilizzare un differente overload
        bitmap.Save(destPath, GetEncoderInfo(mimeType), encoderParams);
    }
    
    /// <summary>
    /// Ottiene la struttura ImageCodecInfo relativa al tipo di immagine.
    /// </summary>
    private ImageCodecInfo GetEncoderInfo(string mimeType)
    {
        ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
        for (int i = 0; i < encoders.Length; i++)
            if (encoders[i].MimeType.Equals(mimeType))
                return encoders[i];
    
        return null;
    }
    Se vuoi approfondire, dai un'occhiata al seguente link:
    Working with Images in the .NET Framework
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  3. #3
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100
    maròòòòòòòòòòòòòòòòò
    pensavo fosse più semplice

  4. #4
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100
    Originariamente inviato da naighes
    Per quello che riguarda il primo quesito, la soluzione è molto semplice.
    Il metodo FillRectangle ti consente di aggiungere quello che tu hai definito il "bordo bianco", mentre il testo lo aggiungi avvalendoti del metodo DrawString.
    scusami ma sono abbastanza ignorante di .net ...
    potresti farmi un esempio?

    io ho già un oggetto immagine, su cui inserisco un rettangolo in cui scrivo il testo

    adesso dovrei allargare i bordi dell'immagine senza deformarla
    in pratica dovrei aggiungere un bordo da 20px all'immagine
    ad esempio l'immagine originale è 100 ed io l'immagine finale devo farla diventare 120

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da s0r42
    scusami ma sono abbastanza ignorante di .net ...
    potresti farmi un esempio?

    io ho già un oggetto immagine, su cui inserisco un rettangolo in cui scrivo il testo

    adesso dovrei allargare i bordi dell'immagine senza deformarla
    in pratica dovrei aggiungere un bordo da 20px all'immagine
    ad esempio l'immagine originale è 100 ed io l'immagine finale devo farla diventare 120
    senti, è inutile che fingi, si vede che sei in gamba non ti mando codice, ma quello che vuoi si può fare creando una bmp che abbia le dimensioni della originale più due volte il bordo, e poi copiando l'originale nella nuova centrandola

    qualche riga più giù troverai un mio tentativo di risposta ad un quesito simile, in basic, però.
    Pietro

  6. #6
    Originariamente inviato da s0r42
    adesso dovrei allargare i bordi dell'immagine senza deformarla
    in pratica dovrei aggiungere un bordo da 20px all'immagine
    ad esempio l'immagine originale è 100 ed io l'immagine finale devo farla diventare 120
    Controlla bene i vari overload del metodo costruttore per la classe Bitmap.
    Fondamentalmente, si tratta di inizializzare il contenitore principale spedificando le sue dimensioni.
    Successivamente, vi si può aggiungere l'immagine di origine.
    Esempio:

    codice:
    public static void BuildImage(string sourcePath, string destPath)
    {
        System.Drawing.Image oldImage = System.Drawing.Image.FromFile(sourcePath);
    
        // Creo un nuovo oggetto Bitmap aggiungendo lo spazio per il bordo superiore
        Bitmap bitmap = new Bitmap(oldImage.Width, oldImage.Height + 20);
        Graphics graphic = Graphics.FromImage(bitmap);
    
        // Aggiungo l'immagine originale
        graphic.DrawImage(oldImage, 0, 20);
    
        // Creo il rettangolo che conterrà il testo
        graphic.FillRectangle(new SolidBrush(Color.White), 0, 0, bitmap.Width, 20);
    
        // Creo il testo all'interno del rettangolo
        graphic.DrawString("Sample Text", new Font(FontFamily.GenericSerif, 12), new SolidBrush(Color.Black), 0, 0);
    
        bitmap.Save(destPath);
    }
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  7. #7
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100
    Originariamente inviato da pietro09
    senti, è inutile che fingi, si vede che sei in gamba
    ma io vengo da vbscript, per me tutte queste cose sono arabo

    comunque piano piano comincio a capire, sto facendo alcune prove, vediamo se ci riesco

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.