Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Ritocco immagini

    Salve regà, ho bisogno di creare un'applicazione che presa un'immagine X e un'immagine logo Y, prenda Y e la piazzi su X, opacizzandola (ovvero rendendola semitrasparente), magari applicandola in un angolo.

    Se non si fosse capito mi serve per marchiare determinate immagini, un pò come fanno quelli di Bastardidentro o Barzellette (se vedete c'è sempre il loro marchio sulle loro immagini).

    Avete suggerimenti in proposito su come potrei farlo con C#?

    Grazie!!

  2. #2
    Non c'è proprio nessun suggerimento? Anche un minimo, su dove cercare notizie, o come ritoccare immagini, jpg, o altro...

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Si direbbe che tu debba creare una filigrana (in inglese, watermark).

    Dai un'occhiata a questo articolo che ho sfruttato per altri scopi simili, anche se con un linguaggio differente: sembra descrivere esattamente ciò che devi fare tu.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Mi genufletto a te Alka

    Ora vedo se mi può tornare utile, penso che qualsiasi appiglio si utile visto che non so proprio da dove cominciare.

    Tnx!!!!

  5. #5
    Diciamo che questo articolo mi ha portato sulla buona strada ma c'è ancora qualcosa che non va.

    Prendo l'immagina X e ci sono, prendo il logo Y e ci sono, applico il logo Y su X con opacizzazione e trasparenza e quì non ci sono.

    Ovvero, la trasparenza c'è, ma non l'opacizzazione, infatti è come se prendessi una gif grezza trasparente e l'appiccicassi sull'immagine, ma le parti colorare del logo non sono opache, non ci si vede attraverso.

    Il frammento di codice (ritradotto in C# perchè era VB.NET) è il seguente:

    codice:
               Bitmap logo = new Bitmap("D:\\temp\\logo.bmp");
               for (py = 0; py < logo.Height; py++)
                {
                    for (px = 0; px < logo.Width; px++)
                    {
                        col = logo.GetPixel(px, py);
                        logo.SetPixel(px, py, Color.FromArgb(128, col.R, col.G, col.B));
                    }
                }
    Questo ciclo dovrebbe prendere pixel per pixel l'immagine caricata in logo e risettarlo nello stesso posto opacizzato a 128.

    Questo esempio l'ho trovato su almeno due articoli, ma allora, perchè non mi funziona?

    Grazie

  6. #6
    Vi faccio un esempio pratico, io parto con queste due immagini:



    e



    Scrivendo il seguente codice

    codice:
        class ClassWatermark
        {
            public static void Main()
            {
                Bitmap bmp = new Bitmap("D:\\temp\\x.jpg");
                Bitmap logo = new Bitmap("D:\\temp\\logo.bmp");
                Graphics canv1 = Graphics.FromImage(bmp);
                Color col;
                int py=0;
                int px=0;
                for (py = 0; py < logo.Height; py++)
                {
                    for (px = 0; px < logo.Width; px++)
                    {
                        col = logo.GetPixel(px, py);
                        logo.SetPixel(px, py, Color.FromArgb(128, col.R, col.G, col.B));
                    }
                }
                logo.MakeTransparent();
                px = bmp.Width - 70;
                py = bmp.Height - 90;
                canv1.DrawImage(logo, px, py, 60, 80);
                bmp.Save("D:\\temp\\xnew.jpg");
            }
        }
    L'immagine risultante è



    mentre invece dovrebbe essere




    In cosa sbaglio?

  7. #7
    Ho risolto, osservando meglio il programma di esempio ho riscontrato delle differenze insignificanti, ma che evidentemente avevano il loro peso.

    Ecco il nuovo codice:

    codice:
        class ClassWatermark
        {
            public static void Main()
            {
                Image img1 = Image.FromFile("D:\\temp\\x.jpg");
                Image img2 = Image.FromFile("D:\\temp\\logo.gif");
                Bitmap bmp = new Bitmap(img1);
                Bitmap logo = new Bitmap(img2);
                Graphics canv1 = Graphics.FromImage(bmp);
                Color col;
                int py=0;
                int px=0;
                for (py = 0; py < logo.Height; py++)
                {
                    for (px = 0; px < logo.Width; px++)
                    {
                        col = logo.GetPixel(px, py);
                        logo.SetPixel(px, py, Color.FromArgb(128, col.R, col.G, col.B));
                    }
                }
                logo.MakeTransparent(logo.GetPixel(0,0));
                px = bmp.Width - 70;
                py = bmp.Height - 90;
                canv1.DrawImage(logo, px, py, 60, 80);
                bmp.Save("D:\\temp\\xnew.jpg");
            }
        }
    La differenza sta nel fatto che prima caricavo i file direttamente come Bitmap, ora prima li carico come Image, poi li passo ai Bitmap.
    Devo poi aggiungere qual'è il pixel campione per definire la trasparenza (logo.MakeTransparent(logo.GetPixel(0,0)).

    Spero le mie esperienze servano a qualcuno, ciao!

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.