DigitalMicrograph を GMS 1.x から GMS 2.x にアップデートした後、カスタマイズしたカラー テーブルを保存できません。DigitalMicrograph GMS 2.x でカスタマイズしたカラー テーブルを保存する方法を知っている人はいますか?
1 に答える
これは必ずしもスクリプトに関する質問ではありませんが、スクリプトによって解決できます。実際には DigitalMicrograph バージョン GMS 2.x のバグのようです。カスタムカラーテーブルはファイルの場所に保存されます
C:\Users\_USERNAME_\AppData\Local\Gatan\ColorTables\
次のコマンドを使用して、このディレクトリ パスにアクセスできます。
GetApplicationDirectory("user_color_table",0)
GMS 2.x 以降、カラー テーブルはファイル形式 *.dm4 で保存されます。残念ながら、カスタム カラー テーブルのドロップダウン リストには、*.dm3 形式のファイル エントリしか表示されません。(明らかにバグです。) 再び機能させるには、カラーテーブルをそのフォルダーに2 回保存します。1 回は *.dm3 拡張子で、もう 1 回は *.dm4 拡張子で。
次のスクリプトを使用して、既存の画像のカラー テーブルをカスタム名で保存できます。
Image img
if ( !GetFrontImage( img ) ) exit( 0 )
Image CLUT := img.ImageGetImageDisplay( 0 ).ImageDisplayGetInputColorTable()
String path = GetApplicationDirectory( "user_color_table" , 1 )
String name
If ( !GetString( "Enter name", img.GetName(), name ) ) exit( 0 )
CLUT.SaveAsGatan( PathConcatenate( path , name ) ) // Save as DM4
CLUT.SaveAsGatan3( PathConcatenate( path , name ) ) // Save again as DM3
保存された/名前付きのものを使用する代わりに、スクリプトを使用して画像に特定のカラーテーブルを設定することもできることに注意してください。例を参照してください:
カラー ルックアップ テーブル (CLUT) を 16x16 RGB イメージとして作成します。
RGBImage CreateCLUT()
{
image r1, g1, b1
number nr, ng, nb, x, y, i, j, count
r1 = IntegerImage( "r", 4, 0, 16, 16 )
g1 = IntegerImage( "g", 4, 0, 16, 16 )
b1 = IntegerImage( "b", 4, 0, 16, 16 )
for ( j = 0; j < 16; j++ ) for( i = 0; i < 16; i++ )
{
count = I * 16 + j
nr = 0; ng = ( 255 - count ) * 4; nb = ( count - 191 ) * 4;
if ( count <= 191 )
{
nr = ( 191 - count ) * 4; ng = 255; nb = ( 191 - count ) * 4;
}
if ( count <= 127 )
{
nr = 255; ng = ( count - 63 ) * 4; nb = ( count - 63 ) * 4;
}
if ( count <= 63 )
{
nr = 255; ng = 255 - count * 4; nb = 0;
}
SetPixel( r1, j, i, nr )
SetPixel( g1, j, i, ng )
SetPixel( b1, j, i, nb )
}
return rgb( r1, g1, b1 )
}
CLUT イメージをイメージに設定します。(最初に RasterDisplay として表示されていることを確認してください。):
Number SetClut( Image img, Image CLUT )
{
if ( !img.ImageIsValid() ) return 0
if ( 0 == img.ImageCountImageDisplays() ) return 0
ImageDisplay disp = img.ImageGetImageDisplay(0)
if ( 1 != disp.ImageDisplayGetDisplayType() ) return 0
disp.ImageDisplaySetInputColorTable( CLUT )
return 1
}
image img
if ( !GetFrontImage( img ) ) exit( 0 )
SetClut( img, CreateCLUT() )