24/48ビット画像から8ビット画像に画像を変換するためのリードツールを使用している画像処理ウィンドウアプリケーションがあります。
実験として、MonoTouchとC#を使用してアプリケーションをiPadに移植していますが、LeadToolsコンポーネントはMonotouchと互換性がありません。使用できる代替品はありますか?そうでない場合、24/48ビットの画像を8ビットに変換するにはどうすればよいですか?
24/48ビット画像から8ビット画像に画像を変換するためのリードツールを使用している画像処理ウィンドウアプリケーションがあります。
実験として、MonoTouchとC#を使用してアプリケーションをiPadに移植していますが、LeadToolsコンポーネントはMonotouchと互換性がありません。使用できる代替品はありますか?そうでない場合、24/48ビットの画像を8ビットに変換するにはどうすればよいですか?
ここで Apple のイメージング ツールを使用するには、ここから始めます。
raw バイトをプラットフォームでサポートされているピクセル形式に変換します。サポートされているピクセル形式については、Quartz 2D のドキュメントを参照してください。
iOS には現在、24 または 48 ビット形式がないことに注意してください。ただし、24 ビット形式がチャンネルあたり 8 ビット (RGB) の場合、8 ビットの無視されたアルファを追加できます。(アルファ オプションは MonoTouch.CoreGraphics.CGImageAlphaInfo にあります)
生のバイトを 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);
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);
最後に、必要なパラメーターに従って構築された CGBitmapContext に描画することにより、その画像の生のバイトを取得できます。
このパイプラインは最適化できると思いますが、開始する場所です。あなたが最終的にどうなるかを聞いてみたいです。
あなたの最善の選択肢は、LeadTools ライブラリへのネイティブ呼び出しを行うことだと思います。考えられる C# での画像操作は、GDI+ やモノタッチでサポートされていない System.Drawing 名前空間などのコンポーネントに依存することになります。
Binding プロジェクトを作成することで、monotouch プロジェクトからネイティブの Objective-C コードを呼び出すことができます - http://docs.xamarin.com/ios/advanced_topics/binding_objective-c_types
これにより、現在の変換コードを実際に作り直すことなく、まったく同じ画像/品質/形式を生成する方法でコードを移植できるようになります。