***互換ホストの怪しい挙動 [#pffd7ab0]
-FireworksでgStuff->foreground, gStuff->backgroundで取得できるカラーが8bit。本来ならRGBColor型は8/16bitモードに関わらず16bitのデータ(0~65535)で格納されているはずなのに0から255までの8bitでの値が入ってる。
-FireworksでホストがfilterSelectorFinishの後で、もう一度filterSelectorContinueからコールバックが呼ばれてる。今の構造だと結局同じのを2度フィルターかけることになるので遅い。Fireworksでは一回目のコールバックで設定ダイアログを出してパラメータをセットし、フィルターをかけずに終了し、もう一度呼ばれるコールバックで本番のフィルターをかけるべきなのかも?
-AfterEffectsのANIMリソースで追加する動的パラメータは同じ型が連続していなければならない。例えば、
ANIM_DT_SHORT
ANIM_DT_SHORT
ANIM_DT_SHORT
ANIM_DT_FLOAT_32
ANIM_DT_SHORT
これはNG。これは
ANIM_DT_SHORT
ANIM_DT_SHORT
ANIM_DT_SHORT
ANIM_DT_SHORT
ANIM_DT_FLOAT_32
このような順序にしなければならない。
-ANIMリソースのANIM_UI_POINTのデータ型は(h,v)の順だけど、PS5.0SDKのPoint型は(v,h)と逆に並んでいる。
-Premiereの動的パラメータのUIは整数型しか表示できない。ただし、UIが整数しか扱えなくとも、キーフレームでは実数を扱うことが可能。またUIにバリエーションが無く、%%SliderしかUIの種類が無い。%%と思ってたら何かのスクリーンショットで角度のやつも見た気がする・・・。バージョン互換不明
-GIMPのpspiでプレビュー窓の表示が変。%%謎。ソースは入手したがcygwin上にGTKライブラリを整えるのがめんどくさそう&ネイティブのGTKライブラリをインストールしてるのでディスク容量の無駄な気がしてやる気がでない。。。%%他のプラグインは知らないけど、自分のに限ればgStuff->inColumnBytesに値がセットされていないのが原因のようだ。カラーモードから自分で計算して値を入れて回避。
-GIMPのpspiでColorServicesのコールバックが使えない。カラーピッカーのダイアログを表示できない。PhotoshopのカラーピッカーはADM(今はADAM?)で作ってるので、まあ互換性が無いのはわかってますよ・・・ええ。でもNULLを入れといてくれればああ使えないんだな、と納得してOS標準のを使えるのに・・・。↓GIMPのカラーピッカーを出すつもりで放置中なんだろうか・・・(v1.0.3)。errPlugInHostInsufficientを拾って回避。
static OSErr
color_services_proc (ColorServicesInfo *info)
{
PSPI_DEBUG (COLOR_SERVICES_SUITE, PING ());
if (info->infoSize < sizeof (ColorServicesInfo))
return errPlugInHostInsufficient;
switch (info->selector)
{
case plugIncolorServicesChooseColor: break;
case plugIncolorServicesConvertColor: break;
case plugIncolorServicesSamplePoint: break;
case plugIncolorServicesGetSpecialColor: break;
default: g_assert_not_reached ();
}
PSPI_DEBUG (COLOR_SERVICES_SUITE, PING ());
return errPlugInHostInsufficient;
}
-Pixiaの8BFPXA.DLLで、filterSelectorStartの次にfilterSelectorContinueを飛ばしてfilterSelectorFinishが来る。フィルター処理本体はfilterSelectorContinueでやってるので何も出来ず。何かのフラグで判別してキャンセルされたと判別しているのかよくわからない。謎。対応策考え中。
-PaintShopProのUpdateProgressは手抜きなのかいらん気をまわしてるのか知らんけど、全てのメッセージをディスパッチしてしまう。
***Photoshopの怪しい挙動(SDKではまってる罠とか) [#u1d0aa29]
-選択範囲。~
Photoshopの場合、ある領域を選択したままフィルターを呼び出すと、その領域がfilterRectに入り、なおかつmaskDataやmaskRowData、haveMask、autoMaskといったマスク関連のパラメータがセットされる。ある領域を選択したままフィルターを呼び出すのは大抵の場合、その領域だけにフィルターをかけたい場合で、autoMaskがTRUEだと自動的に選択領域と非選択領域の境界の色を混ぜてくれ、filterRectにも必要な最小限の領域がセットされるので、この領域だけにフィルターをかければいい。これはPiPLリソースのdontWriteOutsideSelectionフラグのデフォルトの挙動で多くの場合、これで事足りる。~
問題なのは、選択範囲があった場合、autoMaskのTRUEをプログラマがFALSEにして、自動マスクを切ることができると書いてあるのに、期待したとおりに挙動しない点かも。autoMaskをFALSEにすると、確かにブレンディングはOFFになるのだが、filterRectの領域の外をコントロールすることができない。PiPLリソースをwriteOutsideSelectionフラグの場合は、filterRectが全域になるのでそのような事は無いのが、どのパラメータをどのタイミングで切り替えれば、選択領域外に書き込めるのか謎
-選択範囲その2~
PhotoshopElements1ではautoMaskがTRUEの場合、円形のような選択範囲の非選択領域もただしくブレンドしてくれるが、5.0では矩形のままになってしまう。autoMaskが効かない?
-GUIの描画をマルチスレッドにしたらクラッシュ。ドキュメントには何も書いていないけど、スレッドセーフでないようだ。ゴニョゴニョとマルチスレッド化を試みるが、Globalsを上手くスレッドローカルにまとめられない。むずい・・・。いずれは実現させたい・・・。
-この辺で起きるクラッシュの壁を越えられません・・・PS5.02。
007B1010 push ebx
007B1011 push esi
007B1012 push edi
007B1013 mov edi,dword ptr [esp+10h]
007B1017 push edi
007B1018 call 007B0D20
007B101D add esp,4
007B1020 test al,al
007B1022 je 007B1078
007B1024 mov eax,dword ptr ds:[00952CBCh]
007B1029 xor edx,edx
007B102B test eax,eax
007B102D je 007B1078
007B102F mov esi,7B0FE0h
007B1034 mov ebx,dword ptr [eax+4]
あとPhotoshop側のスレッドで無限ループに嵌るところもある。待機?
-もともとフィルター処理のスレッドと、Photoshop全体を描画するスレッドは別なようだ。ダイアログの表示はフィルター処理のスレッドで行われる。どの部分にアクセスしたときにエラーになるのかよくわからないが、本体とフィルター処理がもともと別スレッドに分離されて同期されていたと仮定するなら、フィルター処理から新しく描画用のスレッドを起すと、このスレッドと本体のスレッドは同期が取れなくなるのでエラーが起きるのでは?ということは、怪しげなところで描画スレッドを一時停止させておけば問題なし?(←適当)~
Adobe謹製の(Plugin.dllを使う)プラグインはダイアログのProxy描画はフィルター処理本体のスレッドで行い、スライダーコントロールが別のスレッドになっているように見える。例えばProxy描画中にダイアログをドラッグできないのは、描画処理中にメッセージを処理できていないからではないか。
-WindowsのPhotoshop5.0だとリソースのバージョン情報が変。
1 VERSIONINFO
FILEVERSION 5,0,128,0
PRODUCTVERSION 5,2,6,0
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "040904E4"
{
VALUE "CompanyName", "Adobe Systems, Incorporated"
VALUE "FileDescription", "Adobe Photoshop"
VALUE "FileVersion", "5.0.2"
VALUE "InternalName", "Photoshp"
VALUE "LegalCopyright", "(c) 1989-1998 Adobe Systems Inc."
VALUE "OriginalFilename", "Photoshp.exe"
VALUE "ProductName", "Adobe Photoshop"
VALUE "ProductVersion", "5.0.2"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x8000 0x04B0
}
}
\VarFileInfo\Translationと、\StringFileInfo以下の言語コードが違う・・・。これではアクセスできない・・・。
***SDK関連[#k6e7470c]
-[[How to Write a Photoshop Plug-In, Part 1 :http://www.mactech.com/articles/mactech/Vol.15/15.04/PhotoshopPlug-InsPart1/]]
-[[How to Write a Photoshop Plug-In, Part 2:http://www.mactech.com/articles/mactech/Vol.15/15.05/PhotoshopPlug-InsPart2/]]
-[[How to Write Plug-Ins for Adobe After Effects:http://www.mactech.com/articles/mactech/Vol.15/15.09/AfterEffectsPlugins/]]
-[[How to Use MPW with the Photoshop SDK 6.0:http://www.tonton-pixel.org/photoshop/sdk/mpwps6sdk-en.html]]
-[[PhotoShopSDK4.0(PDF):http://www.xach.com/psd/pshop.pdf]]
-[[Photoshop SDK for Delphi(謎):http://www.centaurix.com/pssdk.html]]
//-[[PhotoshopSDK.exe(本物?):http://www.hta-bi.bfh.ch/Resources/Computing/SunGroup/cgi/cvsweb.cgi/c450/2003/p06/other/PhotoshopSDK/?sortby=log]]
-[[GPU Filter for Photoshop(tm):http://download.developer.nvidia.com/developer/SDK/Individual_Samples/samples.html#GPUFilter]]
***コメントをどーぞ [#cab5cf30]
#comment
----
[[CategoryPSPlugin]]
[[CategoryPhotoshopPlugin]]
HTML convert time: 0.002 sec.