Fichiers images et codes hexa

Signaler
Messages postés
13
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 juin 2007
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Je voudrais éditer des fichiers images du style bitmap pixel par pixel à partir de leur code hexa. Je voulais savoir s'il y avait un moyen de retrouver ces codes hexa pour les stocker dans un tableau et les editer, puis remettre ces données sous forme de bitmap.
Merci

2 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Salut,

Avec Bitmap.GetPixel ?
Et si tu as besoin de meilleures performances, regarde dans les sources de ce site tu devrais trouver plusieurs exemples d'utilisation de GDI non managé.

/*
coq
MVP Visual C#
*/
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Pour éditer un bitmap tu dois verrouiller le bitmap en mémoire et travailler directement dessus avec les pointeurs, récupérer un tableau de valeurs hexa ou de couleurs pour ensuite recréer un bitmap c'est trop long, enfin ça depend de ce que tu veux faire..

Un exemple pour appliquer un filtre avec une image 24bpp.

private struct BGR
{
public byte B;
public byte G;
public byte R;
}


private unsafe void ApplyFilter( Bitmap bmp )
{
try
{
int width = bmp.Width;
int height = bmp.Height;
BitmapData data = bmp.LockBits( new Rectangle( 0, 0, width, height ), ImageLockMode.ReadWrite, bmp.PixelFormat );
int stride = data.Stride;
byte* pStart = ( byte* )data.Scan0;
BGR* p = null;


for ( int y = 0; y < height; y++ )
{
p = ( BGR* )( pStart + y * stride ); // word aligned.


for ( int x = 0; x < width; x++ )
{
// Negative Filter.
p->R = ( byte )( 255 - p->R );
p->G = ( byte )( 255 - p->G );
p->B = ( byte )( 255 - p->B );


p++;
}
}

bmp.UnlockBits( data );


//bmp.Save( "Negative.bmp", ImageFormat.Bmp );
}
catch ( Exception ex )
{
MessageBox.Show( ex.ToString( ) );
}
}