Как сохранить настроенные таблицы цветов в DigitalMicrograph GMS 2.x

После обновления DigitalMicrograph с GMS 1.x до GMS 2.x пользовательские таблицы цветов не могут быть сохранены. Кто-нибудь знает, как сохранить настроенную таблицу цветов в DigitalMicrograph GMS 2.x?


person H.Du    schedule 18.09.2014    source источник


Ответы (1)


Это не обязательно вопрос сценария, но его можно решить с помощью сценариев. На самом деле это похоже на ошибку в DigitalMicrograph версии GMS 2.x. Пользовательские таблицы цветов хранятся в папке с файлом

C:\Users\_USERNAME_\AppData\Local\Gatan\ColorTables\

Вы можете получить этот путь к каталогу с помощью команды:

GetApplicationDirectory("user_color_table",0)

Начиная с GMS 2.x, таблицы цветов хранятся в файле формата *.dm4. К сожалению, выпадающий список пользовательских таблиц цветов содержит только файлы формата *.dm3. (Очевидно, ошибка.) Чтобы он снова заработал, сохраните таблицу цветов дважды в этой папке. Один раз с расширением *.dm3 и один раз с расширением *.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) в виде RGB-изображения 16x16:

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() )
person BmyGuest    schedule 19.09.2014
comment
Работает! Спасибо. - person H.Du; 19.09.2014