Расшифровать и зашифровать частный тег VCGT

mihas

Топикстартер
15 лет на форуме
Сообщения
4 860
Реакции
2 872
Вот ведь задачка, кривые профиля в теге VCGT, которые грузятся в видеокарту, парсятся в непонятном формате, выглядят так примерно:
Код:
<PrivateType>
      <TagSignature>vcgt</TagSignature>
      <UnknownData>
       000000000000000000030100000200000225044b066a08a20ac40ccc0ebe10ab
       124a13a114d815e91723184b19671a791b851c8a1d8c1e891f82207621682256
       2341242a251125f626da27bd289e297f2a5e2b3b2c1a2cf92dda2ebc2f9f3083
       3168325033393423350f35fd36ec37dc38ce39c03aac3b9b3c8b3d7b3e6b3f5b
       404b413a42294318440744f645e546d447c448b349a24a924b824c734d644e55
       4f48503a512d52215315540a54ff55f556ec57e458db59d35aca5bbc5ca95d99
       5e8d5f84607a616f62646357644a653c662d671e680e68fe69ed6adb6bca6cb8
       6da66e946f82706f715d724b733974277516760576f477e478d479c47ab57ba6
       7c977d897e7b7f6e806081528244833584258515860486f287e088ce89bc8aa9
       8b968c838d718e5e8f4b903991279216930593f594e595d696c797ba98ad99a1
       9a969b8c9c849d7c9e769f70a06da16aa269a369a46aa56ca66ea771a874a977
       aa7aab7eac83ad89ae90af98b0a1b1aab2b4b3bfb4cab5d4b6dfb7e9b8f3b9fc
       bb05bc0dbd15be1cbf22c027c12bc22ec330c431c530c62ec72bc826c91eca15
       cb0bcbfeccf0cde0cececfbbd0a6d190d279d362d44ad531d619d700d7e7d8d0
       d9b9daa4db90dc7ddd6bde5bdf4ce040e135e22ce322e418e510e607e6ffe7f8
       e8f2e9eceae7ebe3ece1ede0eee2efe6f0edf1f5f2fff40bf519f628f73af84d
       f962fa79fb91fcabfdc6fee2ffff0cda0e1f0f7510d2127b13d51500160916f0
       17c21885193e19f01aae1b6b1c281ce91dad1e771f46201620e321af22792343
       240c24d4259d2665272e27f728c0298a2a532b1c2be72cb52d842e552f282ffe
       30d531af328b336a344b352d361236f837e138cd39b43a953b753c563d363e17
       3ef63fd640b6419442734351442f450d45ec46ca47a8488649644a434b214c00
       4cdf4dbf4e9f4f7f506051425223530653e954ce55b4569c5790588f59955a95
       5b895c745d5a5e405f24600860ea61cc62ac638d646d654d662d670d67ed68cc
       69ab6a8b6b6a6c4a6d2a6e0a6eeb6fcc70ae7190727273557439751d760376e9
       77cf78b6799e7a877b707c5b7d467e317f1d800980f681e282ce83b984a3858c
       8675875e8846892e8a158afc8be38cca8db18e988f7f9065914c9234931b9402
       94ea95d396bb97a5988f99799a659b519c3f9d2e9e1e9f12a009a103a201a302
       a406a50ba60fa714a817a919aa19ab19ac16ad13ae0faf0cb009b105b201b2fe
       b3f9b4f5b5f0b6ebb7e6b8e0b9d9bad2bbcabcc1bdb8beadbfa2c095c187c277
       c366c453c53fc629c712c7f9c8dec9c1caa2cb82cc61cd3fce1ccef9cfd5d0b0
       d18cd268d345d423d502d5e3d6c5d7a9d88ed975da5fdb4bdc3add2bde1fdf15
       e00ce106e202e2fee3fbe4f9e5f7e6f6e7f4e8f2e9f0eaeeebececeaede8eee6
       efe4f0e1f1def2dbf3d7f4d3f5cf0000020103fc05f007e309de0bd00daf0f7d
       1127128013ac14a515c916d917db18d119bf1aa81b8d1c6e1d4c1e281f021fda
       20b021852259232b23fd24ce259e266f273f280e28de29ae2a7e2b4f2c212cf4
       2dc92e9e2f75304d3126320132dc33b9349735753650372f380f38ed39cb3aa8
       3b843c603d3b3e163ef03fca40a3417b4253432b440344db45b3468b4764483c
       491549ee4ac84ba24c7d4d594e364f134ff150d051af528e53695440551355ec
       56ca57ad589059745a595b3e5c245d095dee5ed15fb460956176625563346412
       64ef65cc66a86784685e69396a136aec6bc66ca06d796e526f2b700570de71b7
       7290736a7443751d75f776d177ab788679617a3d7b197bf67cd47db27e917f70
       80508131821182f183d184b185918670874f882e890d89ed8acc8bab8c8a8d69
       8e498f29900990ea91cb92ad939094739557963c9721980798ed99d39ab99ba0
       9c879d6f9e589f42a02ea11ca20ba2fba3eda4dea5cfa6c0a7b1a8a1a991aa80
       ab6eac5cad49ae35af20b00bb0f5b1deb2c6b3aeb494b57ab65fb743b827b90b
       b9efbad3bbb6bc99bd7cbe5fbf43c027c10cc1f0c2d5c3bac49fc584c669c74e
       c832c915c9f7cad8cbb9cc98cd78ce56cf33d011d0f0d1d0d2b0d392d475d559
       d63ed726d80ed8f9d9e4dad0dbbddcabdd99de89df79e06ae15ce24ee340e432
       e523e614e704e7f4e8e2e9d0eabc000000000000000000000000000000000000
       0000000000000000000000
      </UnknownData>
    </PrivateType>
Точно известно, что эти данные можно представить в виде вот такого графика:
greenVCGT.png
В представленном примере в тенях около нуля программа выдала небольшую лишнюю закорючку на кривой зеленого канала, в результате глубокий черный может выглядеть на мониторе красноватым. Закорючку в тенях по зеленому каналу просто нужно убрать в приведенном примере (это новенький iMac), но basICColor на скрине делает это на редкость топорно. Очевидно, надо поправить в зеленом канале диапазон кривой от 0 до 10%, а басик позволяет лишь двинуть диапазон от 0 до 25%. Отсюда возникает необходимость нормально отредактировать эти кривые vcgt самостоятельно. И тут мы упираемся в непонятный шифр или кодировку.
Если сообща раскодируем и закодируем - я напишу простенькую бесплатную утилитку нормального редактирования этих кривых, главное понять алгоритм, как развернуть эти данные в табличный вид, и как обратно запаковать в этот частный вид. Программы-профилировщики же читают этот тег, операционные системы читают и даже подгружают это в видеокарту, значит как-то представить в табличном виде можно, но гугл мне не дал подсказок как именно.
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 808
Реакции
3 434
Можно попробовать посмотреть в исходниках icclib from Graeme Gill.
 
  • Спасибо
Реакции: mihas

mihas

Топикстартер
15 лет на форуме
Сообщения
4 860
Реакции
2 872
Можно попробовать посмотреть в исходниках icclib from Graeme Gill.
Спасибо, качнул: https://www.argyllcms.com/ICCLib_V2.16_src.zip Терпеливо жду теперь полной индексации содержимого исходников этой библиотеки и уж исходников Argyll заодно. Может и найду там vcgt. Это частный тег от Apple еще до 2003 года, но как-то же не относящиеся к Apple разработчики его и читают и пишут и в видеокарту грузят. Если найду алгоритм отпишусь.
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 808
Реакции
3 434
  • Спасибо
Реакции: mihas

mihas

Топикстартер
15 лет на форуме
Сообщения
4 860
Реакции
2 872
Да лоадер пока не очень интересен, интересно как отредактировать.
 

mihas

Топикстартер
15 лет на форуме
Сообщения
4 860
Реакции
2 872
Что-то по теме чтения в переменные этой абракадабры есть в ICCLib, осталось разобраться, надеюсь разберусь со временем, погуглю UInt32Number что за хрень, я ж пока не пишу на C:
Код:
/* Read gamma format (eg. table or formula) from the buffer */
    p->tagType = (icmVideoCardGammaTagType)read_UInt32Number(bp+8);

    /* Read remaining gamma data based on format */
    if (p->tagType == icmVideoCardGammaTableType) {
        p->u.table.channels   = read_UInt16Number(bp+12);
        p->u.table.entryCount = read_UInt16Number(bp+14);
        p->u.table.entrySize  = read_UInt16Number(bp+16);
        if ((len-18) < sat_mul3(p->u.table.channels, p->u.table.entryCount,
                                p->u.table.entrySize)) {
            sprintf(icp->err,"icmVideoCardGamma_read: Tag too small to be legal");
            return icp->errc = 1;
        }
        if ((rv = pp->allocate(pp)) != 0) {  /* make space for table */
            icp->al->free(icp->al, buf);
            return icp->errc = rv;
        }
        /* ~~~~ This should be a table of doubles like the rest of icclib ! ~~~~ */
        pchar = (ORD8 *)p->u.table.data;
        pshort = (ORD16 *)p->u.table.data;
        for (c=0, bp=bp+18; c<p->u.table.channels*p->u.table.entryCount; c++) {
            switch (p->u.table.entrySize) {
            case 1:
                *pchar++ = read_UInt8Number(bp);
                bp++;
                break;
            case 2:
                *pshort++ = read_UInt16Number(bp);
                bp+=2;
                break;
            default:
                sprintf(icp->err,"icmVideoCardGamma_read: unsupported table entry size");
                pp->del(pp);
                icp->al->free(icp->al, buf);
                return icp->errc = 1;
            }
        }
    } else if (p->tagType == icmVideoCardGammaFormulaType) {
        if (len < 48) {
            sprintf(icp->err,"icmVideoCardGamma_read: Tag too small to be legal");
            return icp->errc = 1;
        }
        p->u.table.channels     = 3;    /* Always 3 for formula */
        p->u.formula.redGamma   = read_S15Fixed16Number(bp+12);
        p->u.formula.redMin     = read_S15Fixed16Number(bp+16);
        p->u.formula.redMax     = read_S15Fixed16Number(bp+20);
        p->u.formula.greenGamma = read_S15Fixed16Number(bp+24);
        p->u.formula.greenMin   = read_S15Fixed16Number(bp+28);
        p->u.formula.greenMax   = read_S15Fixed16Number(bp+32);
        p->u.formula.blueGamma  = read_S15Fixed16Number(bp+36);
        p->u.formula.blueMin    = read_S15Fixed16Number(bp+40);
        p->u.formula.blueMax    = read_S15Fixed16Number(bp+44);
    } else {
        sprintf(icp->err,"icmVideoCardGammaTable_read: Unknown gamma format for icmVideoCardGamma");
        icp->al->free(icp->al, buf);
        return icp->errc = 1;
    }

    icp->al->free(icp->al, buf);
    return 0;
}
 

zollinger

Участник
Сообщения
525
Реакции
163
ну, судя по названию это просто беззнаковое 32-разрядное целое число. Он читает тип гаммы из буфера, по смещению 8 от начала таблицы. Если это таблица, то читается кличество каналов, количество значений в таблице и размер значения. Потом проверочка на неверную таблицу с сообщением. Если все норм, выделяется память под таблицу и читаются значения, двойной точности, как и во всей библиотеке icclib. В зависимости от значения u.table.entrySize (1 или 2) значения в таблице могут быть 8 или 16 разрядными беззнаковыми целыми. И в буфер их чиатем, если нет ошибок. Если есть возвращаем память и завершаемся по ошибке.
Если же там формула tagType == icmVideoCardGammaFormulaType, она всегда для трех каналов, то читаем значения гаммы, минимума и масксимума для каждого канала, ну или завершаемся с ошибкой.
Если все нормально, освобождаем буфер.
Тут все просто, в принципе, правда, кусок из середины функции выдернут, чисто техническая фигня считывания таблицы/формулы. никаких расчетов здесь нет
 
Последнее редактирование:
  • Спасибо
Реакции: mihas

zollinger

Участник
Сообщения
525
Реакции
163
там где-то есть файл с define'ами, в которых поределены значения icmVideoCardGammaTagType, и потом по смещению начало таблицы+8 лежит тип этого профиля - табличный или формульный.
Другой вопрос, что я не уверен, что прям вот с этого места
Код:
000000000000000000030100000200000225044b066a08a20ac40ccc0ebe10ab
       124a13a114d815e91723184b19671a791b851c8a1d8c1e891f82207621682256
       2341242a251125f626da27bd289e297f2a5e2b3b2c1a2cf92dda2ebc2f9f3083
       3168325033393423350f35fd36ec37dc38ce39c03aac3b9b3c8b3d7b3e6b3f5b
       404b413a42294318440744f645e546d447c448b349a24a924b824c734d644e55
       4f48503a512d52215315540a54ff55f556ec57e4
начинаются именно те данные, что она читает, т.е. что bp+0 == 0. Неплохо бы глянуть текст всей функции
 
Последнее редактирование:
  • Спасибо
Реакции: mihas

mihas

Топикстартер
15 лет на форуме
Сообщения
4 860
Реакции
2 872
Неплохо бы глянуть текст всей функции
Это была цитата из файла icc.c, который я скачал по ссылке https://www.argyllcms.com/ICCLib_V2.16_src.zip, внутри файла поиском vcgt. Мне с непривычки сложновато код на C читать, я годами пялюсь только в php и javascript, потому и цитата не вся. Пока понял что немного отложу, но если вам интересно - вот идея: скомпилировать простенькую программу - на входе вот вся эта "абракадабра" из тега vcgt хоть текстовым файлом, на выходе таблицы. И снова на входе таблицы - на выходе абракадабра. Калибровщики мониторов сказали бы вам спасибо, если скомпилировать не только под виндовс - можно к юниксовым сервакам прикручивать, словом было бы крайне полезное дополнение к утилите ICCXML, она что-то давненько не обновлялась. калибровщики мониторов оценили бы шарм. Уж с табличкой из трех кривых справимся как ее поредактировать. Здесь ведь именно стоит задача поредактировать кривые и это актуально, Леша Шадрин восторгался басикколором, что он умеет двинуть черную точку кривой из тега vcgt, а мне не понятно зачем восторг, если басик двигает кривую совершенно топорно и куда лучше можно поправить даже просто предоставив пользователю возможность в экселе поправить табличку и запаковать ее обратно в vcgt, и то будет лучше и точнее, чем в basiccolor.
 

zollinger

Участник
Сообщения
525
Реакции
163
Да нет, писать-то я точно не буду а) нет времени - новый год на носу, б) лень. Мой С,/С++, в основном, для контроллеров, разбираться с кросс-платформенными приложениями мне чет не очень хочется. Просто здесь нормально (не считая switch'а и некоторых констант, заданных прям в тексте), самодокументированно написан текст функции, поэтому и читается прям легко. Взглянуть и поумничать я готов, но работать по этой теме - нет :)
 
  • Спасибо
Реакции: mihas

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 808
Реакции
3 434
И сколько потенциальных пользователей у этой простенькой программки?
 

mihas

Топикстартер
15 лет на форуме
Сообщения
4 860
Реакции
2 872
Берем число откалиброванных мониторов, берем от них тот большой процент, где черная точка прописана неправильно в vcgt - вот и число пользователей. Или это практически половина пользователей, откалибровавшие монитор профайлером от иксрайт, проблемка то не частного, а системного характера. Прибор может ошибаться в замере черной точки, эту проблему кое как решают, используя ли аржил, исправляя ли кривую в basic - я предлагаю еще одно решение.
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 808
Реакции
3 434
Я не столь оптимистичен в прогнозах, потому и не вижу пока смысла в написании этой незамысловатой софтины. Тем более, что код уже написан и осталось лишь его переиспользовать, либо переписать на другой яп и обернуть по вкусу.
 

AlexG

15 лет на форуме
Сообщения
702
Реакции
492
Сложного там ничего нет, никакой криптографии.
Какой то хедер (судя по всему всегда одинаковый, если размер тэга постоянный), 3 раза по 1024 байта - RGB каналы, добитие до какого то фиксированного размера нулями.

В каналых кодирование тупо 4 байта на цифру, big-endian, подряд только значения Y. Значений X нет, они идут подряд от 0 до 255. Собственно, все.

Вот, я на блоки побил:
Это хедер:
0000000000000000000301000002

Это блок RED:
00000225044b066a08a20ac40ccc0ebe10ab
124a13a114d815e91723184b19671a791b851c8a1d8c1e891f82207621682256
2341242a251125f626da27bd289e297f2a5e2b3b2c1a2cf92dda2ebc2f9f3083
3168325033393423350f35fd36ec37dc38ce39c03aac3b9b3c8b3d7b3e6b3f5b
404b413a42294318440744f645e546d447c448b349a24a924b824c734d644e55
4f48503a512d52215315540a54ff55f556ec57e458db59d35aca5bbc5ca95d99
5e8d5f84607a616f62646357644a653c662d671e680e68fe69ed6adb6bca6cb8
6da66e946f82706f715d724b733974277516760576f477e478d479c47ab57ba6
7c977d897e7b7f6e806081528244833584258515860486f287e088ce89bc8aa9
8b968c838d718e5e8f4b903991279216930593f594e595d696c797ba98ad99a1
9a969b8c9c849d7c9e769f70a06da16aa269a369a46aa56ca66ea771a874a977
aa7aab7eac83ad89ae90af98b0a1b1aab2b4b3bfb4cab5d4b6dfb7e9b8f3b9fc
bb05bc0dbd15be1cbf22c027c12bc22ec330c431c530c62ec72bc826c91eca15
cb0bcbfeccf0cde0cececfbbd0a6d190d279d362d44ad531d619d700d7e7d8d0
d9b9daa4db90dc7ddd6bde5bdf4ce040e135e22ce322e418e510e607e6ffe7f8
e8f2e9eceae7ebe3ece1ede0eee2efe6f0edf1f5f2fff40bf519f628f73af84d
f962fa79fb91fcabfdc6fee2ffff

Это блок GREEN:
0cda0e1f0f7510d2127b13d51500160916f0
17c21885193e19f01aae1b6b1c281ce91dad1e771f46201620e321af22792343
240c24d4259d2665272e27f728c0298a2a532b1c2be72cb52d842e552f282ffe
30d531af328b336a344b352d361236f837e138cd39b43a953b753c563d363e17
3ef63fd640b6419442734351442f450d45ec46ca47a8488649644a434b214c00
4cdf4dbf4e9f4f7f506051425223530653e954ce55b4569c5790588f59955a95
5b895c745d5a5e405f24600860ea61cc62ac638d646d654d662d670d67ed68cc
69ab6a8b6b6a6c4a6d2a6e0a6eeb6fcc70ae7190727273557439751d760376e9
77cf78b6799e7a877b707c5b7d467e317f1d800980f681e282ce83b984a3858c
8675875e8846892e8a158afc8be38cca8db18e988f7f9065914c9234931b9402
94ea95d396bb97a5988f99799a659b519c3f9d2e9e1e9f12a009a103a201a302
a406a50ba60fa714a817a919aa19ab19ac16ad13ae0faf0cb009b105b201b2fe
b3f9b4f5b5f0b6ebb7e6b8e0b9d9bad2bbcabcc1bdb8beadbfa2c095c187c277
c366c453c53fc629c712c7f9c8dec9c1caa2cb82cc61cd3fce1ccef9cfd5d0b0
d18cd268d345d423d502d5e3d6c5d7a9d88ed975da5fdb4bdc3add2bde1fdf15
e00ce106e202e2fee3fbe4f9e5f7e6f6e7f4e8f2e9f0eaeeebececeaede8eee6
efe4f0e1f1def2dbf3d7f4d3f5cf

Это блок BLUE:
0000020103fc05f007e309de0bd00daf0f7d
1127128013ac14a515c916d917db18d119bf1aa81b8d1c6e1d4c1e281f021fda
20b021852259232b23fd24ce259e266f273f280e28de29ae2a7e2b4f2c212cf4
2dc92e9e2f75304d3126320132dc33b9349735753650372f380f38ed39cb3aa8
3b843c603d3b3e163ef03fca40a3417b4253432b440344db45b3468b4764483c
491549ee4ac84ba24c7d4d594e364f134ff150d051af528e53695440551355ec
56ca57ad589059745a595b3e5c245d095dee5ed15fb460956176625563346412
64ef65cc66a86784685e69396a136aec6bc66ca06d796e526f2b700570de71b7
7290736a7443751d75f776d177ab788679617a3d7b197bf67cd47db27e917f70
80508131821182f183d184b185918670874f882e890d89ed8acc8bab8c8a8d69
8e498f29900990ea91cb92ad939094739557963c9721980798ed99d39ab99ba0
9c879d6f9e589f42a02ea11ca20ba2fba3eda4dea5cfa6c0a7b1a8a1a991aa80
ab6eac5cad49ae35af20b00bb0f5b1deb2c6b3aeb494b57ab65fb743b827b90b
b9efbad3bbb6bc99bd7cbe5fbf43c027c10cc1f0c2d5c3bac49fc584c669c74e
c832c915c9f7cad8cbb9cc98cd78ce56cf33d011d0f0d1d0d2b0d392d475d559
d63ed726d80ed8f9d9e4dad0dbbddcabdd99de89df79e06ae15ce24ee340e432
e523e614e704e7f4e8e2e9d0eabc

Финальные нули:
000000000000000000000000000000000000
0000000000000000000000

Например, у тебя на Грине при входном нуле на графике идет сразу 5%.
Смотрим - у грина в таблице для нуля 0cda (hex), то есть 3290 в десятичном представлении, это будет как раз 3290/65535=0.05 или 5%.
65535 это FFFF (hex).
Смотрим на график RED последняя точка максимальна. Смотрим в таблицу для RED - так и есть, FFFF.
Ну и т.д.

Так что редактировать такую штуку можно запросто.
 
  • Спасибо
Реакции: mihas

mihas

Топикстартер
15 лет на форуме
Сообщения
4 860
Реакции
2 872
Леша, все понял, вот так мне гораздо понятнее как ты показал! Ты эту таблицу препарировал, мне осталось только простой скрипт написать. Попробую! Я не пробовал пока 4 байта на цифру, big-endian преобразовывать в 16-битные числа, но думаю найду чего-нибудь стандартное для такой конверсии. Спасибо!
 

zollinger

Участник
Сообщения
525
Реакции
163
4 символа вырезал из строки, - в число преобразовал.
для js -
JavaScript:
function hexToDec (hex){ return parseInt(hex,16); }
поделал что нужно и
JavaScript:
function decToHex(n){ return Number(n).toString(16); }
, в строчки собрал, в файл сохранил
 
Последнее редактирование:
  • Спасибо
Реакции: mihas

mihas

Топикстартер
15 лет на форуме
Сообщения
4 860
Реакции
2 872
Спасибо! Все просто и понятно с помощью коллег!
Вот по вашим подсказкам табличка красного канала этих данных в процентах:

0.00 0.84 1.68 2.51 3.37 4.21 5.00 5.76 6.51 7.14 7.67 8.14 8.56 9.04 9.49 9.92 10.34 10.75 11.15 11.54 11.93 12.31 12.68 13.05 13.41 13.77 14.13 14.48 14.83 15.18 15.52 15.87 16.21 16.55 16.89 17.23 17.57 17.91 18.26 18.60 18.95 19.30 19.65 20.01 20.37 20.73 21.09 21.45 21.82 22.19 22.56 22.92 23.28 23.65 24.02 24.38 24.75 25.11 25.48 25.84 26.21 26.57 26.94 27.30 27.67 28.03 28.40 28.76 29.13 29.50 29.86 30.23 30.60 30.97 31.34 31.71 32.08 32.45 32.83 33.20 33.58 33.95 34.33 34.71 35.09 35.47 35.83 36.20 36.56 36.93 37.31 37.69 38.06 38.43 38.81 39.18 39.55 39.91 40.28 40.65 41.01 41.38 41.74 42.11 42.47 42.83 43.20 43.56 43.92 44.28 44.65 45.01 45.37 45.74 46.10 46.47 46.83 47.20 47.57 47.93 48.30 48.67 49.04 49.41 49.78 50.15 50.52 50.89 51.25 51.62 51.99 52.35 52.71 53.08 53.44 53.80 54.16 54.53 54.89 55.25 55.61 55.97 56.34 56.70 57.07 57.43 57.80 58.16 58.53 58.90 59.27 59.64 60.01 60.39 60.76 61.14 61.52 61.90 62.28 62.67 63.05 63.44 63.83 64.23 64.62 65.01 65.41 65.80 66.20 66.59 66.99 67.39 67.79 68.19 68.59 69.00 69.40 69.81 70.21 70.62 71.03 71.44 71.84 72.25 72.65 73.06 73.46 73.86 74.26 74.66 75.06 75.46 75.85 76.25 76.64 77.03 77.42 77.80 78.18 78.56 78.94 79.31 79.69 80.05 80.42 80.78 81.15 81.50 81.86 82.22 82.57 82.93 83.28 83.63 83.99 84.34 84.69 85.05 85.41 85.77 86.13 86.49 86.86 87.23 87.60 87.97 88.35 88.73 89.10 89.48 89.86 90.23 90.61 91.00 91.38 91.76 92.14 92.53 92.92 93.32 93.71 94.11 94.52 94.92 95.33 95.74 96.16 96.57 96.99 97.42 97.84 98.27 98.70 99.13 99.57 100.00

Дооформлю и выложу в открытый доступ. Тащи себе в Эксель, правь как хочешь, потом запаковывай обратно в 16битное представление hex в нужном порядке, все что требовалось собственно.
Делов на 5 минут а польза при хорошей калибровке монитора большая. Я не потому пишу такие утилитки, что у них будет 100500 миллионов пользователей, а просто потому, что решение любой задачи поднимает твой профессиональный уровень. Здесь решил быстро и просто на простом примере, завтра уже не будет проблем решить на сложном примере более сложную задачу.
Всем спасибо за помощь! Реально сообща моментально сделали.
 

mihas

Топикстартер
15 лет на форуме
Сообщения
4 860
Реакции
2 872
В принципе не откладывая в долгий ящик допилил запаковщик и распаковщик vcgt, простенькая утилитка с открытым кодом, огромное спасибо всем за полезные подсказки:
Редактирование пока в эксель - это самый творческий подход и мне он наиболее удобен, утилита распаковывает и запаковывает. Осталось протестировать все эти оффсеты в профиле и кол-во нулей в конце vcgt, сходу IccXML у меня запаковал с каким-то сдвигом, надо выяснить что не так уже при упаковке в icc и сделать инструкцию по применению. Может еще какой hex-редактор задействовать помимо IccXML. Поэкспериментирую.
На картинке - как красиво можно зеленый канал в черном поправить просто в табличном редакторе, basiccolor по сравнению с этим - просто чудовище неаккуратное!-))) В примере vcgt от иксрайта, монитор iMac большой.
 

Вложения

  • vcgtedit.png
    vcgtedit.png
    16.8 КБ · Просм.: 188
  • Спасибо
Реакции: ~RA~

mihas

Топикстартер
15 лет на форуме
Сообщения
4 860
Реакции
2 872
Протестировал наконец. У IccXML нет проблемы с распаковкой профиля монитора, но есть некоторые проблемы с запаковкой. Сильная прога, и профили фотиков мне паковала нормально, и уж тем более профили цветоделения нормально, а тут с мониторами малость не дружит. Короче, как надо обратно тег vcgt не пакует. Взял hex-редактор, любой, я качнул первый попавшийся Hex Editor Neo, минут 10 в нем освоился, определил начало и конец vcgt побайтно, вырезал, вставил свой vcgt, снова сравнил начало и конец - без сдвигов, ок, там же поправил пару символов в desc чтобы имя профиля для программ не совпадало со старым профилем, сохранил с этим именем - полет нормальный, кривые в видеокарту подгрузились. Убрал из vcgt-эдитора разбивку на строки как после IccXML опционально, чтобы напрямую побитно записывать. Напишу инструкцию и можно красиво калибровать мониторы, это не основной заработок вовсе для полиграфиста, но так бывает обращаются и с монитором, чего ж не сделать, если спектрофотометр есть, главный инструмент в ИП. Спасибо всем за помощь в создании полезной утилитки.
 

Вложения

  • vcgt_b1_b2.png
    vcgt_b1_b2.png
    44.8 КБ · Просм.: 176