[ブログに戻る](/ja/blog) # OdDbOle2Frameエンティティから画像ファイルを抽出する

Yuri Moskovsky 8月 01, 2017 [\#Raster image](/ja/blog/tag/raster-image) [\#Example](/ja/blog/tag/example)

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

OLE2フレームエンティティから画像ファイルを抽出する場合、OdDbOle2FrameにはstreamBufを取得するためのgetCompoundDocument()メソッドがありますが、これは複合ドキュメントのストリームであり、画像ではありません。通常、OdOleItemHandlerモジュールは複合ドキュメントを操作するために使用されますが、このモジュールには画像を抽出する機能がなく、またWinAPIを使用するため、Microsoft® Windows®でのみアクセス可能です。

Teighaには、非Windowsプラットフォーム向けにOLEプレビュー画像を描画するための代替のOdOleSsItemHandlerモジュールが含まれています。このモジュールの機能はやや限定的ですが、外部使用のために画像ファイルを抽出する機能をサポートしています。このモジュールはデータベースをロードする前にロードする必要があります。データベースがすでにロードされている場合は、再度ロードする必要があります。例：

```
exractOleImageFiles(pDb->appServices(), pDb->getFilename());

```

一部のOLEエンティティ、例えばMicrosoft Excel®コンテンツを含むエンティティは、WMFプレビューのみを含んでいます。TeighaにはWMFを描画するクロスプラットフォーム機能はありませんが、WMFをファイルとして抽出することはできます。例：

```
void exractOleImageFiles(OdDbHostAppServices* pAppServ,
                         const OdString& sDatabaseFileName)
{
  OdRxModulePtr pModule = odrxDynamicLinker()->loadModule(OdOleSsItemHandlerModuleName);
  if (pModule.isNull())
    throw OdError(L"OdOleSsItemHandler module is missing.");
  OdRxRasterServicesPtr pRasSvcs = odrxDynamicLinker()
                                     ->loadApp(RX_RASTER_SERVICES_APPNAME);
  if (pRasSvcs.isNull())
    throw OdError(L"OdRxRasterServices module is missing");

  OdDbDatabasePtr pDb = pAppServ->readFile(sDatabaseFileName);
  if (pDb.isNull())
    throw OdError(eNoDatabase);

  OdDbBlockTableRecordPtr pSpace = pDb->getActiveLayoutBTRId()
                                          .safeOpenObject(OdDb::kForRead);
  for (OdDbObjectIteratorPtr pItr = pSpace->newIterator(); !pItr->done(); pItr->step())
  {
    OdDbOle2FramePtr pOle2Frame = OdDbOle2Frame::cast(pItr->entity());
    if (pOle2Frame.isNull())
      continue;

    OdOleItemHandlerBasePtr pHandler = pOle2Frame->getItemHandler();
    if (pHandler.isNull())
      continue;
    if (pOle2Frame.isNull())
      continue;
    
    OdString sImageFileName = sDatabaseFileName;
    sImageFileName += L".";
    sImageFileName += pOle2Frame->objectId().getHandle().ascii();

    OdGiRasterImagePtr pImage = pHandler->getRaster();
    if (pImage.get())
    {
      if (pRasSvcs->isRasterImageTypeSupported(OdRxRasterServices::kPNG))
      {
        sImageFileName += L".png";

        OdStreamBufPtr pIO = ::odrxSystemServices()->createFile(sImageFileName,
                                                                Oda::kFileWrite,
                                                                Oda::kShareDenyNo,
                                                                Oda::kCreateAlways);
        if (pIO.get())
          pRasSvcs->convertRasterImage(pImage, OdRxRasterServices::kPNG, pIO);
      }
      continue;
    }

    OdBinaryData data;
    if (pHandler->getWmfData(data))
    {
      sImageFileName += L".wmf";
      OdStreamBufPtr pIO = ::odrxSystemServices()->createFile(sImageFileName,
                               Oda::kFileWrite, Oda::kShareDenyNo, Oda::kCreateAlways);
      if (pIO.get())
        pIO->putBytes(data.asArrayPtr(), data.size());
    }
  }
}

```

## 今すぐ始める

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

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