c# - Compact Framework 上的 8bpp 位图格式

标签 c# compact-framework

我在玩 Conway 的生命游戏 - http://en.wikipedia.org/wiki/Conway 's_Game_of_Life

我开始为 winforms 编写算法,现在想将我的工作移植到 Windows Mobile 6.1(紧凑型框架)上。我看到了 Jon Skeet 的一篇文章,他在文章中比较了几种不同的算法来计算游戏中的下一代。他使用一个字节数组来存储细胞状态(活着或死了),然后他将这个数组复制到一个 8bpp 位图中。对于每一代,他计算出每个字节的状态,然后将数组复制到位图,然后将该位图绘制到图片框。

        void CreateInitialImage()
    {
        bitmap = new Bitmap(Width, Height, PixelFormat.Format8bppIndexed);
        ColorPalette palette = bitmap.Palette;
        palette.Entries[0] = Color.Black;
        palette.Entries[1] = Color.White;
        bitmap.Palette = palette;
    }

    public Image Render()
    {
        Rectangle rect = new Rectangle(0, 0, Width, Height);
        BitmapData bmpData = bitmap.LockBits(rect, ImageLockMode.ReadWrite, bitmap.PixelFormat);
        Marshal.Copy(Data, 0, bmpData.Scan0, Data.Length);
        bitmap.UnlockBits(bmpData);
        return bitmap;
    }

他上面的代码非常简单,而且渲染速度非常快。 Jon 正在使用 Windows 窗体,但现在我想将我自己的版本移植到 Windows Mobile 6.1(紧凑型框架)上,但是 . . . .cf 中无法将位图格式化为8bpp。

任何人都可以建议一种将字节数组呈现为 CF 中的可绘制图像的方法。这个数组是用代码动态创建的(它不是从磁盘上的图像文件加载的)。我基本上需要存储一个由字节表示的单元格数组,它们要么是活的要么是死的,然后我需要将该数组绘制为图像。游戏在 CF 上特别慢,所以我需要实现巧妙的优化算法,但也需要尽可能快地渲染,如果仅在紧凑框架上可用,上述解决方案将非常完美。

非常感谢您的帮助

有什么建议吗?

最佳答案

您可以查看 GDI+ for CF。它基本上是大多数在 WinCE 中实现的 GDI 的包装器。这是源代码和文章的链接:http://community.opennetcf.com/articles/cf/archive/2007/10/31/using-gdi-on-windows-mobile.aspx

我认为 ImagingFactoryClass.CreateBitmapFromBuffer() 看起来是一个不错的起点。

关于c# - Compact Framework 上的 8bpp 位图格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1474665/

相关文章:

c# - DataGrid 列大小(Compact Framework)C#

windows-mobile - 调试 CF.NET 应用程序时如何禁用 SQL Server Compact 的自动部署?

c# - 通过 C# 更改 Windows Mobile 5 主题

c# - 使用空对象初始值设定项有什么缺点吗?

C#相当于java的Graphics2D

c# - FluentValidation:使用 ValidationContext 进行验证

c# - 设计表单以在 Windows CE 上处理不同的分辨率和宽高比

c# - LINQ 连接(左外)与 Take(1)

c# - 在 System.Data.SQLite 中设置 ConnectionTimeout

networking - 在 Compact Framework 中检测 'Network Cable Unplugged'