示例#1
0
        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);
        }
示例#2
0
 public static int CalculateStride(int width, KrecImagePixelFormat format)
 {
     return(CalculateStride(width, format.ToPixelFormat()));
 }