1。反色
Bitmap desc = new Bitmap(source.Width, source.Height);
BitmapData sourcedata = source.LockBits(new Rectangle(0, 0, source.Width, source.Height),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData descdata = desc.LockBits(new Rectangle(0, 0, 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);
BitmapData sourcedata = source.LockBits(new Rectangle(0, 0, source.Width, source.Height),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData descdata = desc.LockBits(new Rectangle(0, 0, 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(0, 0, source.Width, source.Height),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData descdata = desc.LockBits(new Rectangle(0, 0, 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);
BitmapData sourcedata = source.LockBits(new Rectangle(0, 0, source.Width, source.Height),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData descdata = desc.LockBits(new Rectangle(0, 0, 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(0, 0, source.Width, source.Height),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData descdata = desc.LockBits(new Rectangle(0, 0, 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);
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData descdata = desc.LockBits(new Rectangle(0, 0, 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);