終了

RasterizeSuiteで高解像度のラスタライズを正しく行う方法について

Community Beginner ,
Mar 20, 2025 Mar 20, 2025
Illustrator SDKを用いてラスタライズを伴うLiveEffectプラグインの開発を行っています。
現在「ドキュメントのラスタライズ効果設定」を72dpi以上の値に設定したときに、添付画像で説明しているような意図しないビットマップが出力される問題が発生しています。

ラスタライズまでの処理は以下のとおりです。(簡便のために色々省略していますが、ビットマップが取得できるまでは動作していると仮定してください)
 
// GoLiveEffectメソッド内
// artSetにはmessage->artだけが追加されています

AIRasterizeSettings settings;
settings.type = AIRasterizeType::kRasterizeARGB;
settings.antialiasing = 4;
// この値を300などに変更すると、ラスタライズ効果設定を72dpiにしたときにしたときにメモリを使い切ってクラッシュしてしまう
settings.resolution = (double)72;
settings.ccoptions = AIColorConvertOptions::kForExport;
settings.preserveSpotColors = true;
settings.options =
(AIRasterizeOptions)(AIRasterizeOptions::kRasterizeOptionsUseEffectsRes |
AIRasterizeOptions::kRasterizeOptionsDoLayers);

AIArtHandle rasterArt;
sAIArt->NewArt(AIArtType::kRasterArt, AIPaintOrder::kPlaceAbove, art, &rasterArt);

AIRealRect bounds;
sAIRasterize->ComputeArtBounds(artSet, &bounds, false);

AIRealMatrix sourceMatrix;
sAIRaster->GetRasterMatrix(rasterArt, &sourceMatrix);

// ドキュメントのラスタライズ効果設定で指定されたDPIを算出する
int dpi = baseDpi * (1 / sourceMatrix.a);
std::cout << "dpi: " << dpi << std::endl; // この出力はラスタライズ効果設定と一致しています

message->art = rasterArt;
return kNoErr;

 

この処理を行った結果、ドキュメントのラスタライズ効果設定に応じて以下のように、
DPIに応じて図形が縮小されたビットマップが出力されてしまいます。
(おそらく300dpiのときは元の図形の0.24倍のサイズになっている)

hanak1a_1-1742455134653.png

 

 

Illustrator標準のスタイライズ系LiveEffectではこのような問題は発生せず、
オブジェクト輪郭のクッキリ感も維持されているため、何かしらの方法があるかと思います。

なにかご存じの方がいらっしゃいましたらご教示のほど何卒お願いします。

 

キーワード
SDK
421
翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 1 件の正解

Community Expert , Mar 21, 2025 Mar 21, 2025

それなんですけど、こちらの方が参考になるかと思います。

 

https://community.adobe.com/t5/illustrator-discussions/document-raster-effect-details-again/m-p/13812666

 

ただし、ラスタライズ設定は最初はメモリ上に展開されていなくてアプリケーションデフォルトで処理されていて、ユーザーが設定して初めて辞書に記述される系のもので読み込み時にはnullが返ってくる場合があったと思います。

翻訳
Community Beginner ,
Mar 20, 2025 Mar 20, 2025

一旦以下のように、元の画像より極めて小さい範囲でラスタライズを実行してDPIを取得し、取得したDPIをAIRasterSettings.resolutionにセットして全体を再ラスタライズすることで、

「ドキュメントのラスタライズ効果設定」のDPI値がAIRasterSettings.resolutionを下回ったときにクラッシュする問題を回避しつ、72dpi時と視覚上同等の意図した出力を得られるワークアラウンドを行っています。

int dpi;
{
  AIRealRect getDpiBounds;
  getDpiBounds.left   = bounds.left * 0.01;
  getDpiBounds.top    = bounds.top * 0.01;
  getDpiBounds.right  = bounds.right * 0.01;
  getDpiBounds.bottom = bounds.bottom * 0.01;

  sAIRasterize->Rasterize(
      artSet->ToAIArtSet(), &settings, &getDpiBounds, AIPaintOrder::kPlaceAbove, art,
      &rasterArt, NULL
  );

  AIRealMatrix tmpMatrix;
  sAIRaster->GetRasterMatrix(rasterArt, &tmpMatrix);

  dpi = baseDpi * (1 / tmpMatrix.a);
  sAIArt->DisposeArt(rasterArt);
};

 

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Mar 20, 2025 Mar 20, 2025

ドキュメントの辞書にAI なんとかResolutionってやつがあってdpi.ってキーでひっぱれたと思うんですけど、肝心なところが……

4文字に揃えるのに「.」なんか入れてややこしいなぁって思ってそこだけ覚えてると言う…

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Mar 21, 2025 Mar 21, 2025

@Ten A  もしかしてこちらで議論されていた内容と近しいものでしょうか⋯!?

https://community.adobe.com/t5/illustrator-discussions/document-raster-effects-settings-again/td-p/2...

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Mar 21, 2025 Mar 21, 2025

それなんですけど、こちらの方が参考になるかと思います。

 

https://community.adobe.com/t5/illustrator-discussions/document-raster-effect-details-again/m-p/1381...

 

ただし、ラスタライズ設定は最初はメモリ上に展開されていなくてアプリケーションデフォルトで処理されていて、ユーザーが設定して初めて辞書に記述される系のもので読み込み時にはnullが返ってくる場合があったと思います。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Mar 27, 2025 Mar 27, 2025
最新

ありがとうございます!⋯⋯ですが一旦現在のワークアラウンド方法が動作的・パフォーマンス的に問題なさそうで、確実に取得できるため、このワークアラウンドのまま実装を進めました!

次なにか問題にぶつかったときに参考にさせていただきます!

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines