2014-05-10 4 views
0

Comment puis-je définir un Bitmap avec un Color des pixels. J'ai créé un programme avec LockBits et il est très rapide, mais maintenant je dois définir une PictureBox avec cette image que je courais à travers le LockBits Je ne veux pas utiliser setPixels Mon code actuel est:Couleur vers Bitmap

Bitmap imageFile = new Bitmap(bmpPath); 

BitmapData imageData = imageFile.LockBits(new Rectangle(0, 0, imageFile.Width, imageFile.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); 

IntPtr Pointer = imageData.Scan0; 

int ArraySize = Math.Abs(imageData.Stride) * imageFile.Height; 

byte[] PixelArray = new byte[ArraySize]; 

Marshal.Copy(Pointer, PixelArray, 0, ArraySize); 

int PixelAmount = 4; //ArGb 

Color ArGBformat; 

Bitmap RenderedImage = new Bitmap(imageFile.Width, imageFile.Height); 

byte NewAlpha; 
byte NewRed; 
byte NewGreen; 
byte NewBlue; 
unsafe 
{ 
    for (int y = 0; y < imageData.Height; y++) 
    { 
     byte* row = (byte*)imageData.Scan0 + (y * imageData.Stride); 

     for (int x = 0; x < imageData.Width; x++) 
     { 
      int offSet = x * PixelAmount; 
      // read pixels 
      byte blue = row[offSet]; 

      byte green = row[offSet + 1]; 

      byte red = row[offSet + 2]; 

      byte alpha = row[offSet + 3]; 

      //Manipulates pixels 
      NewAlpha = Convert.ToByte(Math.Abs(alpha - _Alpha)); 
      NewRed = Convert.ToByte(Math.Abs(red - _Red)); 
      NewBlue = Convert.ToByte(Math.Abs(blue - _Blue)); 
      NewGreen = Convert.ToByte(Math.Abs(green - _Green)); 


      ArGBformat = Color.FromArgb(NewAlpha, NewRed, NewGreen, NewBlue); 

      RenderedImage.SetPixel(x, y, ArGBformat); //Slow and want something else 
     } 
    } 
} 

Je voudrais définissez mon PictureBox1 sur les pixels parcourus par le programme.

Répondre

2

J'ai trouvé la réponse. Je devais redéfinir les pixels.

//Sets image 
row[offSet] = NewBlue; 
row[offSet + 1] = NewGreen; 
row[offSet + 2] = NewRed; 
row[offSet + 3] = NewAlpha; 
Questions connexes