IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Fusionner deux images avec transparence


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Points : 40
    Points
    40
    Par défaut Fusionner deux images avec transparence
    Bonjour,

    j'ai besoin de fusionner deux png en prenant en compte la transparence.

    mais je bloque déjà sur une étape intermédiaire.

    Il me faut redimensionner un PNG avec un canal trnasparent et le sauver

    et la déjà je perds la transparence avec le code suivant

    imgPhoto est l'objet de type Image que je viens de passer en paramètres


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Bitmap bmPhoto = new Bitmap(destWidth, destHeight, PixelFormat.Format24bppRgb);
                    bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
     
                    Graphics grPhoto = Graphics.FromImage(bmPhoto);
                    grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    Rectangle Rect_fond = new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight);
                   // grPhoto.FillRectangle(new SolidBrush(Color.White), Rect_fond);
     
                    grPhoto.DrawImage(imgPhoto,
                        new Rectangle(destX, destY, destWidth, destHeight),
                        Rect_fond,
                        GraphicsUnit.Pixel);
     
                  // this.SetStyle(ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor, true);
                  // this.BackColor = Color.FromArgb(0, 128, 128, 128);
     
                    bmPhoto.Save(destImag, System.Drawing.Imaging.ImageFormat.Png);
     
                    grPhoto.Dispose();
    j'ai essayé backcolor, solidbrush, et make transparent mais surement pas où il faut

    merci de votre aide

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    PixelFormat.Format24bppRgb
    Argb au lieu de rgb pour avoir la transparence (canal alpha)
    et 32bits ca peut etre mieux ... (quelques bugs de gdi+ en 24bits)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    merci mais j'ai toujours le fond noir au lieu du transparent sur l'image d'origine

    est-ce que l'enregistrement en PNG ecrase l' alpha l'enregistre mal ?
    the gimp à l'air de voir un alpha derrière le fond noir

    ne faut-il pas déclarer à l'ouverture quoi est transparent?

    j 'ai recherché sur le net, je n'ai rien trouvé on dirait que certains réécrivent presque un algorithme pour recopier l'image point par point?

    merci

    PS dans c-sharp-corner
    Obviously this is how you save most other image types with GDI. However PNG is a special exception. It requires a seekable stream, such as that offered by System.IO.FileStream
    PNG est l'exception il fautun filestream et non faire save directement sur l'objet

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    quand on fait un new Bitmap, le fond est noir

    il faut faire grPhoto.Clear(white) pour avoir un fond blanc
    ou grPhoto.Clear(transparent) pour avoir un fond transparent (qui sera quand meme affiché blanc sur beaucoup de logiciels)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    ca marche,
    ton astuce avec Argb suffit,

    je ne connais pas bien Visual c# et mon exécutable dans bin n'était pas modifié mais ok dans le publish.

    merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. superposition de deux images avec transparence
    Par ol9245 dans le forum MATLAB
    Réponses: 3
    Dernier message: 27/10/2014, 10h45
  2. Fusionner deux images avec un QLabel
    Par ridor dans le forum Débuter
    Réponses: 7
    Dernier message: 27/09/2011, 20h33
  3. Réponses: 8
    Dernier message: 18/04/2010, 03h40
  4. "Merger" deux images avec une couleur de transparence
    Par MaelstroeM dans le forum VB.NET
    Réponses: 7
    Dernier message: 14/09/2007, 09h34
  5. [FLASH 8] Importation d'images avec transparence
    Par kephy dans le forum Flash
    Réponses: 6
    Dernier message: 17/10/2005, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo