begin process at 2012 02 15 01:32:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Divers

 > 

General

 > 

Changer l'Inversion de couleur pour un remplacement de couleur


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Changer l'Inversion de couleur pour un remplacement de couleur

jeudi 18 juin 2009 à 13:45:10 | Changer l'Inversion de couleur pour un remplacement de couleur

3KyNoX

Bonjour,

j'ai trouvé une source qui me permet d'inverser les couleurs d'une image de façon optimisée, j'aimerai plutôt remplacer une couleur contenue dans l'image par une autre mais je suis un peu perdu pour savoir comment faire, notemment au niveau du calcul des codes couleurs RGB des méthodes Getpixel et Setpixel de la classe BitMapFast.

Voici la classe utilisée :

[CODE]
Imports System.Drawing
Imports System.Drawing.Imaging

Public Class BitmapFast

    Private b() As Byte
    Private i_Width As Integer
    Private i_Height As Integer
    Private i_Stride As Integer
    Private i_ColorSize As Integer
    Public Disposed As Boolean

    Public Sub New(ByVal filename As String)
        If (filename = "") Or (System.IO.File.Exists(filename) = False) Then
            MsgBox("file '" & filename & "' not found!")
            Exit Sub
        End If

        Dim pv_bitmap As Bitmap = Nothing
        pv_bitmap = New Bitmap(filename)
        i_Width = pv_bitmap.Width
        i_Height = pv_bitmap.Height

        Dim bounds As Rectangle = New Rectangle(0, 0, i_Width, i_Height)
        Dim bitmapData As BitmapData = pv_bitmap.LockBits(bounds, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb)
        i_Stride = bitmapData.Stride
        i_ColorSize = bitmapData.Stride / bitmapData.Width
        ReDim b(bitmapData.Height * i_Stride)
        System.Runtime.InteropServices.Marshal.Copy(bitmapData.Scan0, b, 0, b.Length - 1)
        pv_bitmap.UnlockBits(bitmapData)

        pv_bitmap.Dispose()
        pv_bitmap = Nothing
    End Sub

    Public Function Getpixel(ByVal x As Integer, ByVal y As Integer) As Color
        Dim red, green, blue As Byte
        red = b(x * i_ColorSize + y * i_Stride)
        green = b((x * i_ColorSize + 1) + y * i_Stride)
        blue = b((x * i_ColorSize + 2) + y * i_Stride)
        Return Color.FromArgb(255, red, green, blue)
    End Function

    Public Sub Setpixel(ByVal x As Integer, ByVal y As Integer, ByVal color As Color)
        b(x * i_ColorSize + y * i_Stride) = color.R
        b((x * i_ColorSize + 1) + y * i_Stride) = color.G
        b((x * i_ColorSize + 2) + y * i_Stride) = color.B
    End Sub

    Public Function Get_Bitmap() As Bitmap
        Get_Bitmap = New Bitmap(i_Width, i_Height, PixelFormat.Format24bppRgb)
        Dim bounds As Rectangle = New Rectangle(0, 0, i_Width, i_Height)
        Dim bitmapData As Imaging.BitmapData = Get_Bitmap.LockBits(bounds, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb)
        bitmapData.Stride = CInt(bitmapData.Stride / i_Width) * i_Width
        System.Runtime.InteropServices.Marshal.Copy(b, 0, bitmapData.Scan0, b.Length - 1)
        Get_Bitmap.UnlockBits(bitmapData)
    End Function

    Public Sub Dispose()
        If Disposed = True Then Exit Sub
        Erase b
        Disposed = True
    End Sub

    Protected Overrides Sub Finalize()
        MyBase.Finalize()
        If Disposed = False Then Dispose()
    End Sub

End Class

[/CODE]

Et voici le code qui appelle cette classe :

[CODE]
Public Class Form1
    Private map0 As BitmapFast

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim tps As Integer
        map0 = New BitmapFast(Application.StartupPath & "\..\data\heightmap.png")
        For j As Integer = 0 To 255
            For i As Integer = 0 To 255
                tps = map0.Getpixel(i, j).ToArgb
            Next
        Next
        PictureBox1.Image = map0.Get_Bitmap
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim Color_S, Color_D As Color
        For j As Integer = 0 To 255
            For i As Integer = 0 To 255
                Color_S = map0.Getpixel(i, j)
                Color_D = Color.FromArgb(255, 255 - Color_S.B, 255 - Color_S.G, 255 - Color_S.R)
                map0.Setpixel(i, j, Color_D)
            Next
        Next
        PictureBox1.Image = map0.Get_Bitmap
    End Sub
End Class

[/CODE]

Merci de votre aide.


Cette discussion est classée dans : integer, bitmap, color, bitmapdata, stride


Répondre à ce message

Sujets en rapport avec ce message

appel d'une BITMAP [ par mdesm ] Bonjour Un extrait de code VB 2008 l'editeur me retourne une erreur Pas le droit d'appeler "extrait" car il est vide Mais pour le remplir il faut bi jeu [ par hichem94120 ] Bonjour à tous,Voila je suis débutant et j'ai entrepris de réaliser un jeu de mémoire. Mon problème et d'écrire un algorithme qui contrôlera les cases [Catégorie encore modifiée VB6 --> VBA] Erreur 1004 dans macro imbriquée [ par uspa ] Bonjour, J'essaye de faire tourner ce script mais une erreur 1004 survient au niveau de la macro imbriquée pour la sélection du Range. La macro foncti le nom 'SimInitialize' n'est pas déclaré [ par mr100kv ] Bonjour, Mon socle de dvlpt : vb.net & Compact Framwork 2.0 je désire récupérer le n°IMSI d'une carte SIM afin d'appliquer les paramètres du FAI corr colorisation [ par Redman31100 ] Voici mon code :Public Shared Sub Colorize(ByRef bmp As Drawing.Bitmap, ByVal ColorizingColor As Color)        For x As Integer = 0 To bmp.Width - 1   Erreur enregistrement image après modif [ par Redman31100 ] Voici mon code :  Dim Picture As Drawing.Bitmap = Drawing.Bitmap.FromFile("C:\Users\Redman\Desktop\aaa.jpg")                Dim TemporaryPicture As Dr requête d'insertion et de modification en VB.net 2008 avec SGBD Mysql [ par noahm ] Bonjour à tous Aidez moi à trouver le code pour les requêtes d'insertion et de modification en j'ai essayé le code suivant: [color=blu appel fonction tableau : incompatibilité [ par couette20 ] Bonjour Dans mon programme VB, j'ai crée une fonction : [color=purple]Function vie(ByRef T1() As Byte) As Integer 'Procédure de calcul du nombre de aide programmation jeu de mémoire [ par bendri00 ] Bonjour à tous, je bloque en essayant de créer un petit programme de jeu de mémoire, j'ai regardé les programmes présent en ligne et ils sont tous trè [Catégorie encore modifiée VB6 --> VBA] Syntaxe pour sélectionner des lignes contigues avec une variable [ par uspa ] Bonsoir, J'ai besoin de réorganiser une feuille qui contient plusieurs centaines de lignes (une vingtaine de colonnes) mais mes débuts en VBA sont lab


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales