创建8位图像 [英] Creating 8-bit images

查看:123
本文介绍了创建8位图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建具有纯背景色的8位图像.看起来应该很简单,但是文件上的详细信息将其列为32位色深.我想念什么?

I'm trying to create an 8-bit image with a solid background color. It seems like it should be pretty straight forward but the details on the file list it as 32-bit color depth. What am I missing?

    public void CreateImage()
    {
        var bmpOut = new Bitmap(300, 300);
        var g = Graphics.FromImage(bmpOut);
        g.FillRectangle(new SolidBrush(Color.Gray), 0, 0, 300, 300);

        var stream = new MemoryStream();
        bmpOut.Save(stream, GetPngCodecInfo(), GetEncoderParameters());

        bmpOut.Save(@"C:\image.png", GetPngCodecInfo(), GetEncoderParameters());
    }

    public EncoderParameters GetEncoderParameters()
    {
        var parameters = new EncoderParameters();
        parameters.Param[0] = new EncoderParameter(Encoder.ColorDepth, 8);

        return parameters;
    }

    public ImageCodecInfo GetPngCodecInfo()
    {
        var encoders = ImageCodecInfo.GetImageEncoders();

        ImageCodecInfo codecInfo = null;

        foreach (var imageCodecInfo in encoders)
        {
            if (imageCodecInfo.FormatID != ImageFormat.Png.Guid)
                continue;

            codecInfo = imageCodecInfo;
            break;
        }

        return codecInfo;
    }

推荐答案

使用此构造函数指定像素格式:

Use this constructor to specify a pixel format : http://msdn.microsoft.com/en-us/library/3z132tat.aspx

由于无法使用索引像素格式创建图形,因此只能将原始像素写入8位图像.

Since you cannot create a Graphics from an indexed pixel format, you can only write raw pixels to a 8-bit image.

Bitmap bitmap = new Bitmap(32, 32, PixelFormat.Format8bppIndexed);
var bitmapData = bitmap.LockBits(new Rectangle(Point.Empty, bitmap.Size), ImageLockMode.ReadWrite, bitmap.PixelFormat);
Random random=new Random();
byte[] buffer=new byte[bitmap.Width*bitmap.Height];
random.NextBytes(buffer);
Marshal.Copy(buffer,0,bitmapData.Scan0,buffer.Length);
bitmap.UnlockBits(bitmapData);
bitmap.Save("test.bmp",ImageFormat.Bmp);

您可以在WinForms上使用这样的代码: http ://www.codeproject.com/Articles/17162/Fast-Color-Depth-Change-for-Bitmaps

You can either use such code on WinForms : http://www.codeproject.com/Articles/17162/Fast-Color-Depth-Change-for-Bitmaps

或者,如果您可以从WPF引用此类,它将更加容易: http://msdn.microsoft.com/zh-CN/library/system.windows.media.imaging.formatconvertedbitmap(v=vs.85).aspx

Or if you can reference this class from WPF it will be much easier : http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.formatconvertedbitmap(v=vs.85).aspx

这篇关于创建8位图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆