0

24/48ビット画像から8ビット画像に画像を変換するためのリードツールを使用している画像処理ウィンドウアプリケーションがあります。

実験として、MonoTouchとC#を使用してアプリケーションをiPadに移植していますが、LeadToolsコンポーネントはMonotouchと互換性がありません。使用できる代替品はありますか?そうでない場合、24/48ビットの画像を8ビットに変換するにはどうすればよいですか?

4

2 に答える 2

3

ここで Apple のイメージング ツールを使用するには、ここから始めます。

  1. raw バイトをプラットフォームでサポートされているピクセル形式に変換します。サポートされているピクセル形式については、Quartz 2D のドキュメントを参照してください。
    iOS には現在、24 または 48 ビット形式がないことに注意してください。ただし、24 ビット形式がチャンネルあたり 8 ビット (RGB) の場合、8 ビットの無視されたアルファを追加できます。(アルファ オプションは MonoTouch.CoreGraphics.CGImageAlphaInfo にあります)

  2. 生のバイトを CGImage に変換します。これを行う方法の例を次に示します

        var provider = new CGDataProvider(bytes, 0, bytes.Length);
        int bitsPerComponent = 8;
        int components = 4;
        int height = bytes.Length / components / width;
        int bitsPerPixel = components * bitsPerComponent;
        int bytesPerRow = components * width;   // Tip:  When you create a bitmap graphics context, you’ll get the best performance if you make sure the data and bytesPerRow are 16-byte aligned.
        bool shouldInterpolate = false;
        var colorSpace = CGColorSpace.CreateDeviceRGB();
        var cgImage = new CGImage(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, 
                                  colorSpace, CGImageAlphaInfo.Last, provider,
                                  null, shouldInterpolate, CGColorRenderingIntent.Default);
    
  3. Core Image Filterを使用してモノクロに変換する

        var mono = new CIColorMonochrome
        {
            Color = CIColor.FromRgb(1, 1, 1),
            Intensity = 1.0f,
            Image = CIImage.FromCGImage(image)
        };
        CIImage output = mono.OutputImage;
        var context = CIContext.FromOptions(null);
        var renderedImage = context.CreateCGImage(output, output.Extent);
    
  4. 最後に、必要なパラメーターに従って構築された CGBitmapContext に描画することにより、その画像の生のバイトを取得できます。

このパイプラインは最適化できると思いますが、開始する場所です。あなたが最終的にどうなるかを聞いてみたいです。

于 2012-07-24T15:56:19.320 に答える
0

あなたの最善の選択肢は、LeadTools ライブラリへのネイティブ呼び出しを行うことだと思います。考えられる C# での画像操作は、GDI+ やモノタッチでサポートされていない System.Drawing 名前空間などのコンポーネントに依存することになります。

Binding プロジェクトを作成することで、monotouch プロジェクトからネイティブの Objective-C コードを呼び出すことができます - http://docs.xamarin.com/ios/advanced_topics/binding_objective-c_types

これにより、現在の変換コードを実際に作り直すことなく、まったく同じ画像/品質/形式を生成する方法でコードを移植できるようになります。

于 2012-07-24T15:25:59.947 に答える