public static void Luminancia(int[,,] src, int H, int W) { int r, g, b, gs; for (int y = 0; y < H; y++) { for (int x = 0; x < W; x++) { HsiToRgb.convert(src[x, y, 0], src[x, y, 1], src[x, y, 2], out r, out g, out b); gs = (int)(r * 0.2990 + g * 0.5870 + b * 0.1140); RgbToHsi.convert(gs, gs, gs, out src[x, y, 0], out src[x, y, 1], out src[x, y, 2]); } } }
public unsafe static void bmpToHsi(Bitmap src, int [,,] dest) { int W = src.Width; int H = src.Height; BitmapData bmpData = src.LockBits(new Rectangle(0, 0, W, H), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); byte *ptr = (byte *)bmpData.Scan0.ToPointer(); int padding = bmpData.Stride - (W * 3); int b, g, r, h, s, i; for (int y = 0; y < H; y++) { for (int x = 0; x < W; x++) { b = *(ptr++); g = *(ptr++); r = *(ptr++); RgbToHsi.convert(r, g, b, out dest[x, y, 0], out dest[x, y, 1], out dest[x, y, 2]); } ptr += padding; } src.UnlockBits(bmpData); }