[ブログに戻る](/ja/blog) # ラスタ画像にアルファチャンネルを追加する

Egor Slupko 5月 17, 2017 [\#Alpha channel](/ja/blog/tag/alpha-channel) [\#rendering](/ja/blog/tag/rendering)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

以前は、Teigha開発者はOdGiRasterImage::convertメソッドを使用してラスタ画像にアルファチャンネルを追加し、その後背景色を切り取ることができました。しかし、新しいOdGiRasterImageラッパーであるOdGiRasterImageAlphaChannelAdderを使用すると、このタスクが簡素化されます。

### オブジェクトの作成

OdGiRasterImageAlphaChannelAdderのインスタンスを作成する前に、元のOdGiRasterImageのインスタンスを取得します。これにはいくつかの方法があります。たとえば、元の画像がファイルの場合、Teighaラスタサービスを使用してロードできます。

```
OdRxRasterServicesPtr pRasSvcs = odrxDynamicLinker()->loadApp(RX_RASTER_SERVICES_APPNAME, false); 
if (pRasSvcs.isNull()) // Check that raster services module correctly loaded 
throw OdError(eNullPtr); 
OdGiRasterImagePtr pOriginalImage = pRasSvcs->loadRasterImage(inputFileName); 
if (pOriginalImage.isNull()) // Check that raster image correctly loaded throw OdError(eNullPtr);
```

ラスタ画像を取得できるOdGsDeviceがある場合は、次のコードを使用します。

```
OdGiRasterImagePtr pOriginalImage = OdGiRasterImagePtr(pDevice->properties()->getAt(L"RasterImage"));>
if (pOriginalImage.isNull())
      throw OdError(eNullPtr);
```

元の画像のインスタンスを取得したら、OdGiRasterImageAlphaChannelAdderのインスタンスを作成します。

```
OdGiRasterImagePtr pImage = OdGiRasterImageAlphaChannelAdder::createObject( pOriginalImage, CutOffColor, CutOffColorThreshold );
if (pImage.isNull())
throw OdError(eNullPtr);
```

ここで、CutOffColorはアルファ値0が割り当てられるピクセルの色であり、CutOffColorThresholdはアルファ補間（下記参照）のしきい値です。

### OdGiRasterImageAlphaChannelAdderの操作

OdGiRasterImageAlphaChannelAdderのインスタンスは、通常のOdGiRasterImageとして操作できます。たとえば、Teighaラスタサービスを使用して保存できます。

```
pRasSvcs->saveRasterImage( pImage, ouptupFileName );
```

OdGiRasterImage::scanLinesメソッドを使用して画像ピクセルにアクセスすることもできます。しかし、OdGiRasterImageAlphaChannelAdderは互換性のあるピクセル配列を格納しないため、直接アクセスは許可されておらず、

```
const OdUInt8 *pPixels = pImage->scanLines();
```

NULLポインタを返します。直接アクセスする代わりに、ピクセル配列を中間ユーザー定義配列にコピーしてください。

```
OdUInt8Array scanLine;
scanLine.resize(pInputImage->scanLineSize());
pImage->scanLines(scanLine.asArrayPtr(), 0);
```

### ピクセルカットカラーと閾値の使用

例として、異なる灰色の長方形と白い背景を持つ以下のラスター画像を使用します。

![Rectangles 1](/files/inline-images/image001_0.png)白いカットオフカラーとゼロの閾値でOdGiRasterImageAlphaChannelAdderを作成し、ファイルに保存します。

```
OdRxRasterServicesPtr pRasSvcs = odrxDynamicLinker()->loadApp(RX_RASTER_SERVICES_APPNAME, false);
if (pRasSvcs.isNull()) // Check that raster services module correctly loaded
      throw OdError(eNullPtr);
OdGiRasterImagePtr pOriginalImage = pRasSvcs->loadRasterImage(inputFileName);
if (pOriginalImage.isNull()) // Check that raster image correctly loaded
      throw OdError(eNullPtr);
OdGiRasterImagePtr pImage = OdGiRasterImageAlphaChannelAdder::createObject( pOriginalImage, ODRGB( 255, 255, 255 ) );
if (pImage.isNull())
      throw OdError(eNullPtr);
pRasSvcs->saveRasterImage( pImage, ouptupFileName );
```

結果は次のとおりです。

![Rectangles 2](/files/inline-images/image003_0.png)  
すべての白いピクセルは、アルファ値がゼロになります。  
閾値を使用してスムーズなカットを行うことができます。閾値がゼロでない場合、\[カットカラー成分値 – 閾値; カットカラー成分値 + 閾値\] の範囲内にある各ピクセルの色は、\[カラー = カットカラー、アルファ値 = 0 -&gt; カラー = カットカラー + 閾値、アルファ値 = 255\] の範囲で補間されたアルファ値が割り当てられます。  
したがって、閾値を20に設定すると、次の結果が得られます。

![Rectangles 3](/files/inline-images/image005_0.png)  
すべての白いピクセルは依然として透明であり、最後の長方形のピクセルは部分的に透明になります。  
閾値を40まで上げると、最後の長方形はより透明になり、最後から2番目の長方形は部分的に透明になります。

![Rectangles 4](/files/inline-images/image007_0.png)### 結論

OdGiRasterImageAlphaChannelAdderは、Teigha開発者にラスター画像にアルファチャネルを設定する簡単な方法を提供します。

## 今すぐ始める

**ODAソフトウェアを60日間無料でお試しください。  
リスクなし、クレジットカード不要。**

[無料で試す](https://www.opendesign.com/ja/free-trial)
