public Bitmap ToBitmap() { var pixelFormat = format.ToPixelFormat(); var bitmap = new Bitmap(width, height, pixelFormat); bitmap.SetResolution(horizontalResolution, verticalResolution); if (pixelFormat == PixelFormat.Format8bppIndexed) { var palette = bitmap.Palette; var colorEntries = palette.Entries; for (var colorIndex = 0; colorIndex < 256; colorIndex++) { colorEntries[colorIndex] = Color.FromArgb(colorIndex, colorIndex, colorIndex); } bitmap.Palette = palette; } var bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, pixelFormat); try { if (bitmapData.Stride != bytesPerLine) { var bytes = new byte[bitmapData.Height * bitmapData.Stride]; for (var scanLineIdx = 0; scanLineIdx < height; scanLineIdx++) { Array.Copy(imageData, scanLineIdx * bytesPerLine, bytes, scanLineIdx * bitmapData.Stride, width); } Marshal.Copy(bytes, 0, bitmapData.Scan0, bytes.Length); } else { Marshal.Copy(imageData, 0, bitmapData.Scan0, imageData.Length); } } finally { bitmap.UnlockBits(bitmapData); } return(bitmap); }
public static int CalculateStride(int width, KrecImagePixelFormat format) { return(CalculateStride(width, format.ToPixelFormat())); }