3

我需要将以下方法从 C# 转换为符合 MonoTouch 的代码:

private WritableBitMap CreateBitMapWPF(RGBPaletteRecord rgbPalette, double dpi)
        {
            WritableBitMap bitmapImage = null;

            try
            {
                bitmapImage = new WritableBitMap(TileRecord.PixelWidth, TileRecord.PixelHight, dpi, dpi, PixelFormats.Rgb24, BitmapPalettes.Halftone256);
              //  int nStride = (bitmapImage.PixelWidth * bitmapImage.Format.BitsPerPixel + 7) / 8;
                int nStride = (bitmapImage.PixelWidth * bitmapImage.Format.BitsPerPixel  / 8);
                System.Windows.Int32Rect rect = new System.Windows.Int32Rect(0, 0, TileRecord.PixelWidth, TileRecord.PixelHight);

                byte[] data = GetBytes(rgbPalette);

                bitmapImage.WritePixels(rect, data, nStride, 0);
            }
            catch (Exception ex)
            {

            }

            //// temp write to file to test         
            //using (FileStream stream5 = new FileStream(@"C:\test.bmp", FileMode.Create))
            //{

            //    BitmapEncoder encoder5 = new BmpBitmapEncoder();
            //    encoder5.Frames.Add(BitmapFrame.Create(bitmapImage));
            //    encoder5.Save(stream5);
            //    stream5.Close();
            //}

            //
            return bitmapImage;

        }

我不是要求某人进行实际转换,但我想知道在转换此代码时采取的最佳方法是什么?我应该专注于转换为使用 MonoTouch 库吗?标准系统库?任何建议将不胜感激。

非常感谢,

泰辛

编辑; 基本上这种转换的目的是我有这些 C# 类来执行一组与位图图像有关的功能,我正在使用 MonoTouch,因为我需要在 iPhone 应用程序中使用这些文件。

4

2 回答 2

5

转换此代码时最好的方法是什么?

这取决于您的目标和应用程序。如果您计划跨产品/版本共享代码,那么您最好有一个 API 来抽象平台细节并为每个平台单独代码。

我应该专注于转换为使用 MonoTouch 库吗?

iOS(或 MonoTouch)不支持 WPF API。因此,您最接近的选择是查看 MonoTouch 提供的 iOS API(即在查看 3rd 方库之前查看已经可用的内容)。

通过使用 iOS CoreGraphics(通常与旧System.Drawing模型非常相似),您会发现类似的功能。对于位图图像,您应该阅读该CGImage类型的文档。

于 2012-09-04T17:35:24.480 回答
0

你还应该看看这个项目:

https://github.com/praeclarum/CrossGraphics

由 Frank Krueger (gg!) 制作,它使您能够在平台之间共享相同的基本图形代码。它是一个抽象了每个平台的细节实现的 API。目前它似乎仅限于基本图形(如fillrect等......

于 2012-09-06T12:45:59.690 回答