private void Paste_4BitCount(int x, int y, Bmp src) { int sw = src.bmih.biWidth; int sh = src.bmih.biHeight; int sLineStride = src.GetLineStride(); int dLineStride = GetLineStride(); int sidx = src.GetByteOffset(0, 0); int didx = GetByteOffset(x, y); int sw2 = sw / 2; for (int i = 0; i < sh; ++i) { for (int j = 0; j < sw2; ++j) { byte scidx = src.imageData[sidx + j]; RGBQUAD sc0 = src.colorTable[scidx >> 4]; RGBQUAD sc1 = src.colorTable[scidx & 0xF]; int dcidx0 = Array.IndexOf(colorTable, sc0); int dcidx1 = Array.IndexOf(colorTable, sc1); imageData[didx + j] = (byte)((dcidx0 << 4) | dcidx1); } sidx += sLineStride; didx += dLineStride; } }
private void Paste_8BitCount(int x, int y, Bmp src) { int sw = src.bmih.biWidth; int sh = src.bmih.biHeight; int sLineStride = src.GetLineStride(); int dLineStride = GetLineStride(); int sidx = src.GetByteOffset(0, 0); int didx = GetByteOffset(x, y); for (int i = 0; i < sh; ++i) { for (int j = 0; j < sw; ++j) { RGBQUAD sc = src.colorTable[src.imageData[sidx + j]]; imageData[didx + j] = (byte)Array.IndexOf(colorTable, sc); } sidx += sLineStride; didx += dLineStride; } }