リンクをクリップボードにコピー
コピー完了
// 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;
それなんですけど、こちらの方が参考になるかと思います。
ただし、ラスタライズ設定は最初はメモリ上に展開されていなくてアプリケーションデフォルトで処理されていて、ユーザーが設定して初めて辞書に記述される系のもので読み込み時にはnullが返ってくる場合があったと思います。
リンクをクリップボードにコピー
コピー完了
一旦以下のように、元の画像より極めて小さい範囲でラスタライズを実行して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);
};
リンクをクリップボードにコピー
コピー完了
ドキュメントの辞書にAI なんとかResolutionってやつがあってdpi.ってキーでひっぱれたと思うんですけど、肝心なところが……
4文字に揃えるのに「.」なんか入れてややこしいなぁって思ってそこだけ覚えてると言う…
リンクをクリップボードにコピー
コピー完了
@Ten A もしかしてこちらで議論されていた内容と近しいものでしょうか⋯!?
リンクをクリップボードにコピー
コピー完了
それなんですけど、こちらの方が参考になるかと思います。
ただし、ラスタライズ設定は最初はメモリ上に展開されていなくてアプリケーションデフォルトで処理されていて、ユーザーが設定して初めて辞書に記述される系のもので読み込み時にはnullが返ってくる場合があったと思います。
リンクをクリップボードにコピー
コピー完了
ありがとうございます!⋯⋯ですが一旦現在のワークアラウンド方法が動作的・パフォーマンス的に問題なさそうで、確実に取得できるため、このワークアラウンドのまま実装を進めました!
次なにか問題にぶつかったときに参考にさせていただきます!
新しいアドビコミュニティで、さらに多くのインスピレーション、イベント、リソースを見つけましょう
今すぐ検索