3

Image Magick ライブラリまたは iphone の obj-c コードを使用して Photoshop の「乗算効果」を複製するにはどうすればよいですか? これのサンプルコードはどこにありますか? この質問も見ました

4

3 に答える 3

8

これを簡単に行う方法が必要な場合は、私のGPUImageフレームワークに GPUImageMultiplyBlendFilter があります。これは 2 つの画像を取り込み、各ピクセルに対して赤、緑、青、およびアルファ チャネルごとの乗算を実行します。これは GPU で高速化された方法で行われるため、CPU で同じ操作を実行するよりも 4 ~ 6 倍高速になります。

これを使用するには、2 つの画像をブレンドするように設定します。

UIImage *inputImage1 = [UIImage imageNamed:@"image1.jpg"];    
GPUImagePicture *stillImageSource1 = [[GPUImagePicture alloc] initWithImage:inputImage1];

UIImage *inputImage2 = [UIImage imageNamed:@"image2.jpg"];    
GPUImagePicture *stillImageSource2 = [[GPUImagePicture alloc] initWithImage:inputImage2];

次に、ブレンド フィルターを作成して構成します。

GPUImageMultiplyBlendFilter *blendFilter = [[GPUImageMultiplyBlendFilter alloc] init];
[inputImage1 processImage];
[inputImage1 addTarget:blendFilter];
[inputImage2 addTarget:blendFilter];
[inputImage2 processImage];

最後に、ブレンドされた画像の結果を抽出します。

UIImage *filteredImage = [blendFilter imageFromCurrentlyProcessedOutput];

現在の実装におけるこれに関する 1 つの注意点は、iPad 2 よりも古いデバイスではテクスチャ サイズが制限されているため、2048x2048 を超える画像はこれらの古いデバイスでは現在処理できないことです。私はそれを修正することに取り組んでいます。

于 2012-04-21T21:49:52.367 に答える
4

Multiply は (Adobe と呼ばれる) ブレンド モードです。ブレンド モードは基本的に、数式を使用したピクセル操作です。2 つの画像をブレンドすることも、1 つの画像を使用して「自己ブレンド」を行うこともできます。

これは、特定のピクセルの各チャネル値を取得して処理することにより、画像をピクセルごとに操作することで実現できます。

残念ながら、私は Magick ライブラリに詳しくありません。ただし、チャネル値 (赤、緑、または青、0 ~ 255) を指定すると、乗算演算の結果の値が返される式を次に示します。

unsigned char result = a * b / 255;

ここで、a と b も unsigned char でなければならないことに注意してください。そうしないと、結果が 1 バイトより大きくなるため、オーバーフローが発生する可能性があります。これは基本的な乗算式です。より大きな変数サイズを割り当て、除数を適切に変更することで、チャネルごとに 16 ビットをサポートするように変数を適応させることができます。

于 2012-04-21T16:46:31.843 に答える