Pennant的日常
分享工作上的点点滴滴

1。反色

 

Bitmap desc = new Bitmap(source.Width, source.Height);
BitmapData sourcedata 
= source.LockBits(new Rectangle(00, source.Width, source.Height), 
                ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData descdata 
= desc.LockBits(new Rectangle(00, desc.Width, desc.Height),
                ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);

unsafe
{
      
byte* sourceptr = (byte*)sourcedata.Scan0;  
      
byte* descptr = (byte*)descdata.Scan0;
      
for (int x = 0; x < source.Height; x++)
      {
           
for (int y = 0; y < source.Width; y++)
           {
                
*(descptr++= (byte)(255 - *(sourceptr++));
                
*(descptr++= (byte)(255 - *(sourceptr++));
                
*(descptr++= (byte)(255 - *(sourceptr++));
            }
            sourceptr 
+= sourcedata.Stride - source.Width * 3;
            descptr 
+= descdata.Stride - desc.Width * 3;
       }
}
source.UnlockBits(sourcedata);
desc.UnlockBits(descdata);

 

 

2。霓虹灯

 

Bitmap desc = new Bitmap(source.Width, source.Height);
BitmapData sourcedata 
= source.LockBits(new Rectangle(00, source.Width, source.Height), 
                ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData descdata 
= desc.LockBits(new Rectangle(00, desc.Width, desc.Height),
                ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);

unsafe
{
      
byte* sourceptr = (byte*)sourcedata.Scan0;  
      
byte* descptr = (byte*)descdata.Scan0;
      
int step = source.Width * 3;
      
double value;
      
for (int x = 0; x < source.Height; x++)
      {
           
for (int y = 0; y < source.Width; y++)
           {
                value 
= 2 * Math.Sqrt((*sourceptr - *(sourceptr + 3)) * (*sourceptr - *(sourceptr + 3)) +
                        (
*sourceptr - *(sourceptr + step)) * (*sourceptr - *(sourceptr + step)));
                
*(descptr++= value > 255 ? (byte)255 : (byte)(value);
                sourceptr
++;
            }
            sourceptr 
+= sourcedata.Stride - source.Width * 3;
            descptr 
+= descdata.Stride - desc.Width * 3;
       }
}
source.UnlockBits(sourcedata);
desc.UnlockBits(descdata);

 

 

3。浮雕

 

 Bitmap desc = new Bitmap(source.Width, source.Height);

BitmapData sourcedata = source.LockBits(new Rectangle(00, source.Width, source.Height), 
                ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData descdata 
= desc.LockBits(new Rectangle(00, desc.Width, desc.Height),
                ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);

unsafe
{
      
byte* sourceptr = (byte*)sourcedata.Scan0;  
      
byte* descptr = (byte*)descdata.Scan0;
      
int step = (source.Width + 1* 3;
      
double value;
      
for (int x = 0; x < source.Height; x++)
      {
           
for (int y = 0; y < source.Width; y++)
           {
                value 
= Math.Abs(*(sourceptr - step) - *sourceptr + 128);
                
*(descptr++= value > 255 ? (byte)255 : (byte)(value);
                sourceptr
++;
            }
            sourceptr 
+= sourcedata.Stride - source.Width * 3;
            descptr 
+= descdata.Stride - desc.Width * 3;
       }
}
source.UnlockBits(sourcedata);
desc.UnlockBits(descdata);

 

 

posted on 2010-09-08 23:18  汝熹  阅读(338)  评论(0编辑  收藏  举报