[英]8bpp Bitmap format on the Compact Framework
我在搞弄康威的人生游戏-http: //en.wikipedia.org/wiki/康威的s_Game_of_Life
我开始为winforms编码algorithmns,现在想将我的工作移植到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 Forms,但现在我想将自己的版本移植到Windows Mobile 6.1(Compact Framework)上,但是。 。 。 。无法在cf中将位图格式化为8bpp。
谁能建议一种在CF中将字节数组呈现到可绘制图像的方法。 该数组是用代码动态创建的(不是从磁盘上的映像文件加载的)。 我基本上需要存储一个由字节表示的单元格数组,它们是活着的还是死的,然后我需要将该数组绘制为图像。 在CF上,游戏特别慢,因此我需要实现聪明的优化算法,但还需要尽可能快地渲染,并且如果紧凑型框架上只有上述解决方案,那将是非常完美的选择。
非常感谢您的帮助
有什么建议么?
您可以看看CF的GDI +。 它基本上是WinCE中实现的大多数GDI的包装。 这是源代码和文章的链接: http : //community.opennetcf.com/articles/cf/archive/2007/10/31/using-gdi-on-windows-mobile.aspx
我认为ImagingFactoryClass.CreateBitmapFromBuffer()似乎是一个不错的起点。
好吧,这呢:
更改MemoryStream后,您可能必须将其复制回位图,或制作一个新的位图。 如果确实制作了一个新的位图,请确保将旧的位图()丢弃,以避免内存泄漏。
您好Rocjoe,再次感谢您的帮助,我已经尝试了以下方法
Image bmp = new Bitmap(10, 10);
byte[] array = ImageToByteArray(bmp);
public byte[] ImageToByteArray(Image img)
{
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif );
return ms.ToArray();
}
返回的数组中有870多个字节,它似乎包含了各种标题信息,填充以及您所拥有的内容。 所以再次它不起作用...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.