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 :

Explication de code Unsafe{}


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Par défaut Explication de code Unsafe{}
    Salut à tous !

    J'aurais besoin de votre aide pour comprendre la partie Unsafe de ce code, car je voudrais le traduire en VB.NET :

    Code C# : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
            /// <summary>
            /// Replaces any pixel with a zero alpha value with the specified transparency key.
            /// </summary>
            /// <param name="bmpData">The bitmap data in which to perform the operation.</param>
            /// <param name="transKey">The transparency color. This color is rendered transparent
            /// by the DragDropHelper.</param>
            /// <remarks>
            /// This function only supports 32-bit pixel formats for now.
            /// </remarks>
            private static void ReplaceTransparentPixelsWithTransparentKey(BitmapData bmpData, DrawingColor transKey)
            {
                DrawingPixelFormat pxFormat = bmpData.PixelFormat;
     
                if (DrawingPixelFormat.Format32bppArgb == pxFormat
                    || DrawingPixelFormat.Format32bppPArgb == pxFormat)
                {
                    int transKeyArgb = transKey.ToArgb();
     
                    // We will just iterate over the data... we don't care about pixel location,
                    // just that every pixel is checked.
                    unsafe
                    {
                        byte* pscan = (byte*)bmpData.Scan0.ToPointer();
                        {
                            for (int y = 0; y < bmpData.Height; ++y, pscan += bmpData.Stride)
                            {
                                int* prgb = (int*)pscan;
                                for (int x = 0; x < bmpData.Width; ++x, ++prgb)
                                {
                                    // If the alpha value is zero, replace this pixel's color
                                    // with the transparency key.
                                    if ((*prgb & 0xFF000000L) == 0L)
                                        *prgb = transKeyArgb;
                                }
                            }
                        }
                    }
                }
                else
                {
                    // If it is anything else, we aren't supporting it, but we
                    // won't throw, cause it isn't an error
                    System.Diagnostics.Trace.TraceWarning("Not converting transparent colors to transparency key.");
                    return;
                }
            }

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Basiquement tu ne pourra pas traduire ce code en Vb.Net car VB.Net ne supporte pas le code unsafe. En gros dans cette section ce n'est pas simplement l'objet bitmap qui est accédé mais ses véritables données via les pointeurs, un peut comme on aura fait en C++.
    La solution de la facilité aurai été de créer une autre assembly en C# qui contiendrait tout ce qui n'est pas traduisible et l'ajouter comme référence à ton projet VB.NET.

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Si tu veux traduire ce code il va falloir passer par la classe Marshal c'est le seul équivalent possible...

  4. #4
    Membre émérite
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Par défaut
    Basiquement tu ne pourra pas traduire ce code en Vb.Net car VB.Net ne supporte pas le code unsafe.
    Oui, c'est ce que j'ai pu lire dans un ancien post similaire, donc j'ai choisi la solution de facilité !

    (c'est surtout la plus rapide pour mon projet). Merci à tous les deux.

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

Discussions similaires

  1. Explication de code
    Par claralavraie dans le forum Linux
    Réponses: 1
    Dernier message: 20/03/2006, 09h58
  2. Réponses: 1
    Dernier message: 02/02/2006, 11h10
  3. Shell - Explication de code
    Par claralavraie dans le forum Linux
    Réponses: 13
    Dernier message: 13/01/2006, 16h03
  4. Explication de code - RE
    Par deedoo dans le forum Général Python
    Réponses: 23
    Dernier message: 29/07/2005, 14h00
  5. Explication de code simple
    Par Clad3 dans le forum OpenGL
    Réponses: 3
    Dernier message: 20/03/2005, 11h31

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