編集: ブラッドのコメントのおかげで、チャネルを交換しないより効率的なソリューションは、「gl_FragColor = vec4(vec3(mag), 1.0);」を置き換えることです。「gl_FragColor = vec4(mag);」で エッジ検出フィルター ソースで。
GPUImageColorMatrixFilter のパラメーターを操作して、チャンネルを別のチャンネルにマッピングできます。サンプルコード:
GPUImagePicture *gpuImage = [[GPUImagePicture alloc] initWithImage:image];
GPUImageSobelEdgeDetectionFilter *edgeFilter = [[GPUImageSobelEdgeDetectionFilter alloc] init];
GPUImageColorMatrixFilter *conversionFilter = [[GPUImageColorMatrixFilter alloc] init];
conversionFilter.colorMatrix = (GPUMatrix4x4){
{0.0, 0.0, 0.0, 1.0},
{0.0, 0.0, 0.0, 1.0},
{0.0, 0.0, 0.0, 1.0},
{1.0,0.0,0.0,0.0},
};
[gpuImage addTarget:edgeFilter];
[edgeFilter addTarget:conversionFilter];
[gpuImage processImage];
return [conversionFilter imageFromCurrentlyProcessedOutputWithOrientation:orientation];
colorMatrix で指定された値は、基本的に、以前のアルファ チャネル (非透過イメージの場合はすべて 255) を使用して RGB チャネルを置き換え、以前の R チャネル (黒と白のイメージは RGB で同じ値を持つ) を使用してアルファ チャネルを置き換えることを示しています。 .