пользовательская js кнопка с иконкой

  • Автор темы Автор темы shadowbat
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

shadowbat

Участник
Топикстартер
Сообщения
106
Реакции
1
Добрый вечер!

есть код добавления кнопки через .js файл
Код:
function helloWorld(){app.alert('1')}
app.addToolButton({cName: "1", cExec: "helloWorld()", cLabel: "1"})

и есть два похожих кода, которые работают в JS отладчике и в Мастере операций и добавляют кнопку с иконкой
Код:
var myDoc = app.newDoc(); // Create a document
myDoc.importIcon("myIcon", "/D/111.png", 0); // import icon (20x20 pixels) from the file specified
oIcon = util.iconStreamFromIcon(myDoc.getIcon("myIcon")); // convert the icon to a stream.
myDoc.closeDoc(true); // close the doc now that we have grabbed the icon stream
app.addToolButton({ // add a toolbutton
cName: "myToolButton",
oIcon: oIcon,
cExec: "app.alert('Someone pressed me!')",
cTooltext: "Push Me!",
cEnable: true,
nPos: 0
});
Код:
this.importIcon("myIcon", "/D/111.png", 0);
var oIcon = util.iconStreamFromIcon(this.getIcon("myIcon"));
app.addToolButton({
cName: "myButton",
oIcon: oIcon,
cExec: "app.alert('Someone pressed me!')",
cTooltext: "My button!",
nPos: 0
});

Как объединить оба кода (верхний и любой из двух нижних), чтобы кнопка сама добавлялась с иконкой после открытия Акробата?
пишет ошибку
TypeError: this.importIcon is not a function
1:Folder-Level:App:111.js

иконка:
111.png


или нужно как-то иконку напрямую вставлять в скрипт в виде длинной HEX-строки?
addToolButton - oIcon - Hexadecimal Value | Adobe Community
 
Последнее редактирование:
через HEX почему-то получилось только 16х16
20х20 не получается
 
Последнее редактирование:
через HEX почему-то получилось только 16х16
20х20 не получается
Вы как то быстро сами себе задаете вопрос и сами на него отвечаете и задаете следующий '))'
Там в комьюнити полно примеров и на 16x16 и на 20x20
Вы приведите конкретные примеры кода, который у вас работает и не работает
 
  • Спасибо
Реакции: shadowbat
похоже, что в самом Акробате основной размер иконок 24 х 24 (стандартный размер)
но для JS кнопок они разрешили только 20 х 20 (нестандартный размер для иконки)
может поэтому 16 х 16 (стандартный размер) иконки получается, а 20 х 20 - нет

Вы как то быстро сами себе задаете вопрос и сами на него отвечаете и задаете следующий
что в этом плохого, если хотя бы сам себе отвечаю?
Там в комьюнити полно примеров и на 16x16 и на 20x20
Вы приведите конкретные примеры кода, который у вас работает и не работает

ну вот например такой код
Код:
function helloWorld()
{
  //Say Hello World
  app.alert("Hello World");
}
var CreateButton = app.trustedFunction( function() {
app.beginPriv();
var myDoc = app.newDoc(1,1);
  var img = myDoc.importIcon("publishbutton", "/C/Development/tst.jpg", 0);
  var oIcon = util.iconStreamFromIcon(myDoc.getIcon("publishbutton"));
  app.addToolButton({
  cName: "helloWorldBtn", // A name for your button
  oIcon: oIcon,
  cExec: "helloWorld()", //Function to Call
  cTooltext: "Say Hello World" //The Help Text
});
  myDoc.closeDoc(true);
  app.endPriv();
  });
CreateButton();
рабочий, но создает документ перед каждым запуском Акробата. Таким образом, если кнопок штук 5 - значит будет создавать 5 документов - будет мельтешить на экране

есть ли способ без создания нового документа перед импортом иконки?
нашел только HEX способ, но не могу в нём получить строку иконки 20 х 20, только 16 х 16

например такой код выдаёт иконку 20 х 13 (если перемножить 20х13 будет 260, что примерно равно 16х16=256), она как раз в конце обрезанная в последней строке на несколько пикселов
zz2013.png

Код:
var myIconStream = "ff9f4e7bffa54b7fffa84880ffac4481ffb04182ffb23e83ffb53c84ffb83785ffb93785ffba3685ffba3685ffba3685ffb83a84ffb53a85ffb23e83ffb04182ffad4381ffa94780ffa44b7fffa04c7cffa54b7fffaa4680ffad4381ffb23e83ffb63c83ffb93785ffbc3086ffbd2d86ffc2428dffc33e8cffc02c87ffbf2c86ffbe2c87ffbc3086ffb93686ffb63b84ffb23e83ffae4282ffa94780ffa6497fffa84880ffac4481ffb24083ffb83a84ffba3485ffbe2d86ffc12588ffc62d8bffe196bfffebbfd6ffd877adffc5238affc32289ffc12788ffbe2d86ffba3386ffb83a84ffb23e83ffad4382ffaa4680ffac4481ffb13f83ffb63b84ffbb3286ffbf2a86ffc32288ffc7258affe08ab9fff5dce9fff9f5f8fff0c9dcffd96eaaffc71b88ffc51e88ffc32288ffc02a88ffbb3286ffb83a84ffb13f83ffad4382ffaf4182ffb53c83ffba3685ffbf2a86ffc42288ffc61c88ffdd78b1fff3d2e4fffcf8fbfffffffffffaf5f7fff0c3dbffda6aaaffc9198affc61c88ffc42288ffc02a88ffba3386ffb53c84ffb04182ffb23e83ffb83a84ffbe2d86ffc22588ffc61e89ffca168affd7499efff0b7d6fffaf3f7fffefefefffefefefff9f2f6fff1c6dcffde72afffc91a8affc61c89ffc32288ffbe2c87ffb83986ffb43e83ffb53c84ffba3386ffc02788ffc61e88ffc9198affcc138bffd1158effdf4fa5fff1b5d7fff9f2f6fffefefefffefefefffaf3f7fff1c6ddffdd6babffc9188affc61e89ffc12788ffba3386ffb63b84ffb63a84ffbd2d86ffc22588ffc71a89ffcc158affcf0f8bffd10a8cffd50c8fffe449a8fff4b6d8fffbf6f8fffefefefffffffffff9f2f6fff0c2daffdb66a8ffc81a89ffc42288ffbd2f86ffb93886ffb93785ffcb5d9cffe39cc2ffe8a1c7ffeb9ec8ffec9cc8ffed97c8ffef94c7fff19bcbfff6c9e2fffaf5f8fffefefefffffffffffefefffff9f2f6fff0c3daffdb6facffc52289ffbf2c87ffb93485ffba3386ffd57dadfff4e7effffaf6f9fffaf6f9fffaf6f9fffaf6f9fffaf6f9fffaf6f9fffbf7fafffcfcfdfffefefefffffffffffffffffffdfffffffaf5f7fff1c9ddffd974acffc02e88ffba3386ffba3386ffd781aefff7eef3fffefefefffefefefffefefefffefefefffefefefffefefffffefefffffefefefffffffffffffffffffffffffffdfffffffdfefefff7f0f4ffe8abcbffc02e88ffba3386ffb93686ffd77faffff8f0f3fffffffffffffffffffffffffffffffffffdfffdfffdfffdfffffffefffffffffffffffffffffffffffffffffffefefefffbf8f9fff3d3e3ffda7ab0ffc02a88ffba3386ffb93686ffcd66a0ffe9aeccffedb4d2ffefb1d2fff1aed2fff3abd2fff3a8d1fff4abd5fff7d2e6fffbf7fafffefefefffffffffffefefefffaf5f7fff4cee1" ;
var oIcon = { count: 0, width: 20, height: 20, read: function(nBytes){return myIconStream.slice(this.count, this.count += nBytes)}, GetIcon: function() {this.count = 0; return this;} };
function helloWorld(){app.execMenuItem ("FitVisible");}
app.addToolButton({cName: "1", cLabel: "1", oIcon: oIcon, cExec: "helloWorld()"});

такой код работает нормально, но на 16 х 16
zz1616.png

Код:
var myIconStream = "fffffffffffefcfefffefcfffffdf8fbfffcf5f6fff8eaeafff5e0defff4dedbfff4dcd9fff6e4e2fffaefeffffdf8f8fffefcfdfffbfcfcfffcfffefffcfffffffefefefffefdfffffefbfefffaf1f2fff3dedeffe5c7c6ffdbb6b2ffd4afabffd4b0acffd7bbb9ffe0cdcdffede3e2fff5f2f4fffafbfbfffcfffefffcfffffffcf7fafffaf1f2fff6e1e2ffedc1c1ffe39897ffdd7571ffda5d56ffd9564dffd95950ffdb6861ffdf817bffe6a6a3fff0cecbfff8eae9fffefbfbfffefcfcfffcf5f7fff8e8e9fff0ceccffe59f9dffd26e68ffc44d43ffc53e2effbf3a28ffc23c2affb74237ffb6544dffbf7a76ffd5ada9fff0dad8fffbf6f6fffefcfcfffaefedfff1d1cfffe5a09cffdb685effd7432cffd73c19ffd73a13ffd73a12ffd73a12ffd23916ffcf3b1dffc44b3affd07a71ffe9b9b3fff7ebe7fffdfaf6fff9eceaffedc4c1ffe08881ffcc4e40ffcd391affd13915ffd73a14ffd73b15ffd73a14ffd13916ffc73716ffb03925ffb55e54ffd1a19cffebe0dbfffcf7f4fff6e4e0ffe9b1b0ffdc6c68ffd2412affd63913ffd33a15ffd23b16ffcd3913ffcc3813ffd53b17ffd73a16ffc2361bffc2493dffd18983ffe7d1cafff9eee8fff6e2dfffe8adabffdb6761ffcf3e26ffd73914ffd73c17ffd23b16ffc9370fffc9370fffd63b17ffd73b18ffc2371cffbe4538ffc9817bffe0cac3fff8e9e3fff4ddddffe7abadffdb6866ffd4402bffd73914ffd63b17ffd23a16ffca360fffc9360fffd43a15ffd73a16ffc2361bffc3453bffcf817fffe4c7c4fff6e3e2fff6e3e4ffe9b4b6ffdc7271ffd84633ffd73a17ffd63b17ffd33b17ffcf3914ffcf3914ffd73b17ffd73a17ffc83920ffcd4e46ffdb8d8bffedd0cdfff8e9e7fffbf4f5fff0cfd0ffe39793ffd35c50ffcf3d24ffd03919ffd73a16ffd73a15ffd73a16ffce3919ffc7391effb64334ffbf6d66ffd9aca9ffefe5e3fffcf7f7fffdf8fafff4dedeffe8b1afffdd7871ffd84d3bffd73f22ffd73b18ffd73a16ffd73a16ffd33c1cffd4432bffd05c50ffe08e88ffeec7c4fffbf2f0fffdfafafffbfffffffcf6f7fff6e2dfffebbab6ffd78c85ffc76960ffc35347ffbb4b3effbb4c3fffb75a51ffbd756cffcc9d97ffe1cbc6fff5eeecfff8fffffff8fffffff9fcfefffdf9f9fffbf2f0fff4dcd9ffebbcb8ffe49d98ffe0857fffde7c75ffde7d76ffe19088ffe7aaa4ffefccc6fff8eae6fffefcf9fff9fffffff8fffffffbfcfffffcfdfffffffefffffefcfffffbf4f6fff4e5e4ffebd6d3ffe4d0ccffe4d0ccffe8dbdafff2ebecfff9f8fbfffbfffffffafffffffafffffffafffffffefffffffafbfffffbfafffffefcfffffdfafdfffcf6f6fff9eeebfff8eae7fff8eae6fffbf2f0fffdfafbfffffefffff8fcfffff4f9fefff9fffffffaffff" ;
var oIcon = { count: 0, width: 16, height: 16, read: function(nBytes){return myIconStream.slice(this.count, this.count += nBytes)}, GetIcon: function() {this.count = 0; return this;} };
function helloWorld(){app.execMenuItem ("FitVisible");}
app.addToolButton({cName: "1", cLabel: "1", oIcon: oIcon, cExec: "helloWorld()"});

мне нужен способ добавления иконки без создания каждый раз для этого нового документа
если этот способ единственный через HEX строку, то нужен способ получения этой строки из иконки размером 20 х 20, потому что в той теме способ получения нормально работает только для 16 х 16
Код:
this.importIcon("myIcon", "/D/111.png", 0);
var oIcon = util.iconStreamFromIcon(this.getIcon("myIcon"));
oIcon.read();

если нужен пример нерабочего кода - вот например кружок 20 х 20
z2020.png

Код:
var myIconStream = "00000000000000000000000003d73a1415d73a141cd73a1429d73a142cd73a1427d73a1418d73a1406d73a1403d73a1400000000000000000000000000000000000000000cd73a142ad73a1451d73a1465d73a147fd73a147ed73a146fd73a1453d73a142cd73a1418d73a1406d73a1400000000000000000000000006d73a1424d73a1456d73a1493d73a14afd73a14c4d73a14c7d73a14b9d73a148ed73a1459d73a1436d73a140fd73a14000000000000000007d73a142dd73a1454d73a14a6d73a14ddd73a14efd73a14f7d73a14f8d73a14f4d73a14dcd73a14a7d73a1473d73a1431d73a1406d73a140000000015d73a1451d73a1490d73a14ddd73a14fcd73a14fed73a14ffd73a14ffd73a14fed73a14fbd73a14e4d73a14b2d73a1452d73a1412d73a14000000001cd73a1469d73a14add73a14efd73a14fed73a14ffd73a14ffd73a14ffd73a14ffd73a14fed73a14f3d73a14cbd73a1469d73a1418d73a1406d73a1429d73a147cd73a14c3d73a14f7d73a14ffd73a14ffd73a14ffd73a14ffd73a14ffd73a14fed73a14fad73a14e0d73a147ed73a1428d73a140cd73a142cd73a147ed73a14c6d73a14f8d73a14ffd73a14ffd73a14ffd73a14ffd73a14ffd73a14fed73a14fbd73a14e1d73a1481d73a142cd73a140cd73a1427d73a146fd73a14b9d73a14f4d73a14fed73a14ffd73a14ffd73a14ffd73a14ffd73a14fed73a14f8d73a14d9d73a1479d73a142cd73a140cd73a1414d73a1453d73a1490d73a14dcd73a14fbd73a14fed73a14fed73a14fed73a14fed73a14fad73a14e1d73a14b2d73a1455d73a1412d73a1403d73a1406d73a142cd73a1455d73a14aad73a14e4d73a14f3d73a14fad73a14fbd73a14f8d73a14e1d73a14add73a1473d73a142ed73a1406d73a14000000000000000012d73a1431d73a1471d73a14b4d73a14ced73a14dfd73a14e1d73a14d9d73a14b4d73a1474d73a144dd73a1418d73a1400000000000000000000000003d73a140cd73a142dd73a1451d73a146ad73a1480d73a1483d73a1476d73a1455d73a142cd73a141ad73a1406d73a14000000000000000000000000000000000000000006d73a140cd73a141ed73a142ad73a142cd73a1424d73a1415d73a140000000000000000000000000000000000000000000000000000000000000000000000000000000006d73a140cd73a140cd73a1406d73a14000000000000000000000000000000000000000000000000" ; 
var oIcon = { count: 0, width: 20, height: 20, read: function(nBytes){return myIconStream.slice(this.count, this.count += nBytes)}, GetIcon: function() {this.count = 0; return this;} };
function helloWorld(){app.execMenuItem ("FitVisible");}
app.addToolButton({cName: "1", cLabel: "1", oIcon: oIcon, cExec: "helloWorld()"});
 
Последнее редактирование:
рабочий, но создает документ перед каждым запуском Акробата. Таким образом, если кнопок штук 5 - значит будет создавать 5 документов - будет мельтешить на экране
Проблема в том, что importIcon - это метод документа, а не приложения. А значит импортировать можно только в созданный документ. Но зачем же на каждую кнопку документ создавать? Создайте один документ непосредственно перед CreateButton а затем импортируйте каждую кнопку в него, после чего закройте.
 
  • Спасибо
Реакции: shadowbat
Создайте один документ непосредственно перед CreateButton
всё равно он как минимум один раз будет появляться на 0,2 сек и напоминать о себе при каждом открытии Акробата для создания этого документа
js.png

да и при таком способе модульность не получится (один js файл на каждую кнопку)

да и зачем её каждый раз импортировать, если можно один раз импортировать, узнать стрим данных и уже напрямую этот стрим данных скармливать при создании иконки
 
Последнее редактирование:
один js файл на каждую кнопку
Почему? Насколько я понимаю, в одном js файле можно несколько вызовов addToolButton делать на разные кнопки, а документ создавать один перед этим. Или я чего то недопонимаю?
да и зачем её каждый раз импортировать, если можно один раз импортировать, узнать стрим данных и уже напрямую этот стрим данных скармливать при создании иконки
Они один раз и импортируются при открытии акробата и создании кнопок.
Вообще говоря, наверняка можно и через НЕX но возни много с преобразованием бинарника
 
  • Спасибо
Реакции: shadowbat
Почему? Насколько я понимаю, в одном js файле можно несколько вызовов addToolButton делать на разные кнопки, а документ создавать один перед этим. Или я чего то недопонимаю?
всё верно, только я не хочу файл кнопки.js, я хочу файлы кнопка1.js кнопка2.js и т.д.
Вообще говоря, наверняка можно и через НЕX но возни много с преобразованием бинарника
так выше есть уже готовый код на 16 х 16, там возни вообще нет. осталось только 20 х 20 узнать как делать

1. там либо
Код:
this.importIcon("myIcon", "/D/111.png", 0);
var oIcon = util.iconStreamFromIcon(this.getIcon("myIcon"));
oIcon.read();
выдает не весь стрим-код, или выдает весь, но он может не помещается в окне отладчика JS
2. либа эта строка преобразования не совсем верная
Код:
var oIcon = { count: 0, width: 16, height: 16, read: function(nBytes){return myIconStream.slice(this.count, this.count += nBytes)}, GetIcon: function() {this.count = 0; return this;} };
других мест с ошибкой то не может быть
 
Последнее редактирование:
всё верно, только я не хочу файл кнопки.js, я хочу файлы кнопка1.js кнопка2.js и т.д.
Бррррр!
Вы же сами только что писали
да и при таком способе модульность не получится
И не получится у вас по любому поиметь доступ из одного js файла к переменным, инициализированным в другом js файле - придется каждый раз импортировать или из файла или из HEX строки
так выше есть уже готовый код на 16 х 16, там возни вообще нет. осталось только 20 х 20 узнать как делать
Насколько я понимаю, там в бинарную строку загнана иконка 16x16, наверное, если корректно загнать 20x20 то нормально получится - с жпегами ж такой трюк канает?
 
  • Спасибо
Реакции: shadowbat
Бррррр! Вы же сами только что писали
может я неправильно выразился. термином "модульность" как раз и имел ввиду, чтобы использовать независимые друг от друга файлы кнопка1.js кнопка2.js
Насколько я понимаю, там в бинарную строку загнана иконка 16x16
да, конечно
наверное, если корректно загнать 20x20 то нормально получится
в этом как раз и есть весь вопрос. как получить строку из иконки 20 х 20?
с жпегами ж такой трюк канает?
я ж говорю гений! с jpg отлично работают стримы и для 16х16 и для 20х20

итого имеем:
jpg 16x16 - работает
jpg 20x20 - работает
png 16x16 - работает
png 20x20 - не работает

jpg достаточно для работы с иконками
по большому счету, можно считать тему решенной
 
Ну, для начала, я не пойму, откуда вы вообще взяли строку
Код:
var myIconStream = "00000000000000000000000003d73a1415d73a141cd73a1429d73a142cd73a1427d73a1418d73a1406d73a1403d73a1400000000000000000000000000000000000000000cd73a142ad73a1451d73a1465d73a147fd73a147ed73a146fd73a1453d73a142cd73a1418d73a1406d73a1400000000000000000000000006d73a1424d73a1456d73a1493d73a14afd73a14c4d73a14c7d73a14b9d73a148ed73a1459d73a1436d73a140fd73a14000000000000000007d73a142dd73a1454d73a14a6d73a14ddd73a14efd73a14f7d73a14f8d73a14f4d73a14dcd73a14a7d73a1473d73a1431d73a1406d73a140000000015d73a1451d73a1490d73a14ddd73a14fcd73a14fed73a14ffd73a14ffd73a14fed73a14fbd73a14e4d73a14b2d73a1452d73a1412d73a14000000001cd73a1469d73a14add73a14efd73a14fed73a14ffd73a14ffd73a14ffd73a14ffd73a14fed73a14f3d73a14cbd73a1469d73a1418d73a1406d73a1429d73a147cd73a14c3d73a14f7d73a14ffd73a14ffd73a14ffd73a14ffd73a14ffd73a14fed73a14fad73a14e0d73a147ed73a1428d73a140cd73a142cd73a147ed73a14c6d73a14f8d73a14ffd73a14ffd73a14ffd73a14ffd73a14ffd73a14fed73a14fbd73a14e1d73a1481d73a142cd73a140cd73a1427d73a146fd73a14b9d73a14f4d73a14fed73a14ffd73a14ffd73a14ffd73a14ffd73a14fed73a14f8d73a14d9d73a1479d73a142cd73a140cd73a1414d73a1453d73a1490d73a14dcd73a14fbd73a14fed73a14fed73a14fed73a14fed73a14fad73a14e1d73a14b2d73a1455d73a1412d73a1403d73a1406d73a142cd73a1455d73a14aad73a14e4d73a14f3d73a14fad73a14fbd73a14f8d73a14e1d73a14add73a1473d73a142ed73a1406d73a14000000000000000012d73a1431d73a1471d73a14b4d73a14ced73a14dfd73a14e1d73a14d9d73a14b4d73a1474d73a144dd73a1418d73a1400000000000000000000000003d73a140cd73a142dd73a1451d73a146ad73a1480d73a1483d73a1476d73a1455d73a142cd73a141ad73a1406d73a14000000000000000000000000000000000000000006d73a140cd73a141ed73a142ad73a142cd73a1424d73a1415d73a140000000000000000000000000000000000000000000000000000000000000000000000000000000006d73a140cd73a140cd73a1406d73a14000000000000000000000000000000000000000000000000" ;
Размер этой строки 900 байт, вроде как, 4 байта на пиксел, то есть 225=15*15 - разумеется для 20 на 20 не годится даже по размеру, надо по идее 19x19=361 или 1444 байт
 
  • Спасибо
Реакции: shadowbat
откуда вы вообще взяли строку
из картинки 20х20 png
Код:
this.importIcon("myIcon", "/D/111.png", 0);
var oIcon = util.iconStreamFromIcon(this.getIcon("myIcon"));
oIcon.read();

хотя в SDK написано, что этот метод достаточно всеяден
Acrobat will try to convert cDIPath to PDF from one of the known graphics formats (BMP, GIF, JPEG, PCX, PNG, TIFF) and then import the
converted file as a button icon.

разумеется для 20 на 20 не годится даже по размеру
для 20x20 jpg стрим получается действительно почти в 2 раза больше (3200 знаков против 1800)
Код:
fffffefafffefdf9fff7fffefff8fffffffcfffffffdfafffffbf2fdfffbf2f6fff6efebfff2ebe3fff2ebe1fff5ede4fffaf1edfffcf6f9fffefffffffefffffffdfffdfffefffdfffffefffffefdfffffefefbfffffffcfffafffffff9fffdfffdf7fbfff9edf2fff4dce2fff1d2d4ffedcac5ffe9c6bfffeac7bfffefccc5fff2d4d2fff5e0e2fffaf1f3fffaf6f6fffdfdfbfffffffdfffffefffffefdfffffcfefdfffefffffffffffdfff8f5effff5e0dfffefcccbffe8b0afffe49a97ffdf8f86ffdd8b83ffde8b84ffe2928effe5a3a4ffebbbbafff2d4d1fff7e8e3fffcf5f3fffefdfefffffefffffefffffffdfffffffdfffffffcf6f3fff5ded8ffecbeb9ffe49a94ffde7970ffda6354ffd45644ffd55443ffd65446ffda5a52ffdc6d6affe08985ffe7ada3fff0cdc5fff7e5e6fffcf6f7fffefdfdfffefffffffffffffffafafafff6e4e0ffecbfbbffe2938cffdb695cffd44d38ffd54226ffd13d1cffd43d1dffd53c1effd73e27ffd84638ffd45a4fffdd7f70ffe6a799ffefcccffff8e9e9fffdf8f7fffefffbfffefbfbfff5ededffefcac6ffe49b97ffdc6c62ffd84934ffd53d1bffd53b15ffd53b13ffd73b14ffd73a14ffd73a17ffd73c1fffd1402affd85844ffdd816bffe8b1b5fff3dad8fffbf3f0fffffff8fffbf3f1ffefe2deffe8b0adffda7a74ffd84e42ffd73e20ffd73a14ffd73a12ffd63b12ffd73b13ffd73a14ffd73a16ffd73a19ffd73b1affd74328ffd66245ffe2969cffeccac7fff9ece7fffefdf4fff9eee9ffeddad5ffe4a09dffd1655fffd74130ffd73b19ffd73a13ffd73a11ffd03910ffd33a12ffd73a14ffd73a17ffd73a18ffd73915ffd43d1bffd75131ffda8589ffe4bdb9fff7e5dffffdf9eefff6e2e6ffeacdcfffe18e86ffd95842ffd03f17ffcf3a10ffd13a10ffd33a12ffd73a17ffd73a17ffd73a18ffd73a15ffcf3912ffca3811ffce3a15ffd74525ffd77070ffe7aaabfff3dacefffaf1e7fff4dde5ffe7c6ccffe08582ffd7513fffd33c16ffd23910ffd63a12ffd73a13ffd73a17ffd73917ffd73a17ffd73a16ffd53a15ffd23a14ffd33a16ffd74125ffd66b6cffe6a7a8fff2d7ccfffaf1e7fff6e2e9ffe8c9d0ffe08987ffd65345ffd63d19ffd53a14ffd73a15ffd73b16ffd73a19ffd73a17ffd73a16ffd73a16ffd73b17ffd43a16ffd53b18ffd74029ffd5696dffe4a5a7fff2d4cbfffaefe5fff7e6e8ffe5d0d1ffe2948dffd35e4dffd4401fffd13a15ffd43a13ffd53b14ffd03915ffd03914ffd33a13ffd23a12ffd23a13ffce3912ffd13b18ffd74531ffd87379ffe8aeb0fff3d9d0fffaf0e8fff9ecebffeed9d8ffe5a49bffd96f5fffd7482cffd33c19ffd63a14ffd53a13ffd23a13ffd33a13ffd73b11ffd63b11ffd33a10ffd13914ffd6401fffd95444ffdf868fffecc0c2fff7e7dffffdf8f2fffcf5f9fff7e6eaffebbab4ffe0877bffd95845ffd74025ffd73b19ffd53a15ffd63a14ffd73a13ffd73b11ffd73a11ffd73b13ffd73d1cffd84831ffdc6d63ffe49ea7fff2d5d6fff9f5edfffffef9fffefbfffff9f3fafff2d5cfffe7aaa2ffde7b6fffd95446ffd4422effd23c22ffd03a1cffd33a18ffd73b16ffd73b17ffd73f21ffd54a35ffd66654ffe2928bffebbcc3fff7e7e9fff7fdf6fffbfffdfff3fefffff1fefffff5f2e9fff1d1c8ffe6a89dffde7b72ffda5d54ffd74d41ffd24733ffd3432bffd74227ffd7452cffd95240ffdb6a5dffdd9181ffebc2b5fff2d6dafffcf5f8fff6fefbfff6fefefffefffffffdfefdfffcf7f5fff8e8e5fff1d0ccffe9b4b1ffe39893ffdf7f79ffdc6c66ffdb6962ffda6b65ffdd7471ffdd8b8bffe6a6a8ffecbfc1fff2d4d6fff5f5f5fffcfcfcfffffffffffffffffffcfffffffcfffffffefffefffdfaf6fff7eee8fff4ded7ffeeccc3ffeabab1ffe7a9a1ffe5a69effe5a79fffe8aea9ffecc0bcfff2d4d1fff7e6e5fffcf4f4fff9f9f9fffefefefffffffffffffffffffffefffffefdfffffcfffffffcfffffffafffdfff9fef8fff7f6effff2ebe4ffecddd4ffebd9d2ffedd9d2fff2ded7fff4e8e3fff8f1eefff8fbfafffdfffefffefefefffffffffffffffffffefefefffefbfdfffdfafcfffefdfffffffffffffbfffffffcfffffffbfefffff8f7f8fffcf6f6fffbf4f3fffbf3f2fffcf7f6fffefbfcfffefdfffffefffffffefffffffffffffffffffffffffffffffefefe
 
Последнее редактирование:
Этот метод берет картинку 20 на 20 и обрезает ее до бинарника 15 на 15
хотя полученный бинарник выводится корректно - действительно 20 на 20, как вы правильно заметили
Ваша проблема (которая при здравом размышлении и не проблема вовсе) - получить корректный бинарник нужного размера.
 
  • Спасибо
Реакции: shadowbat
Ваша проблема (которая при здравом размышлении и не проблема вовсе) - получить корректный бинарник нужного размера.

еще бы знать как это правильно сделать
для 20х20 jpg обычный HEX редактор выдаёт
Код:
FFD8FFE1010845786966000049492A00080000000500120103000100000001000000310102003E0000004A00000032010200140000008800000013020300010000000100000069870400010000009C00000000000000CFF0EEE3F0E0ECECE020F6E8F4F0EEE2EEE920EEE1F0E0E1EEF2EAE820E8E7EEE1F0E0E6E5EDE8E920EAEEECEFE0EDE8E8204143442053797374656D7300323031363A30313A30372031343A30393A333700050000900700040000003032323090920200040000003830390002A00400010000001400000003A00400010000001400000005A0040001000000DE000000000000000200010002000400000052393800020007000400000030313030000000000000E049FFC00011080014001403012100021101031101FFDB00840003020202020103020202030303030407040404040409060605070A090B0B0A090A0A0C0D110E0C0C100C0A0A0F140F1011121313130B0E151615121611121312010405050605060D07070D1B120F121B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1BFFC4007A000002020300000000000000000000000006090108040507100001030303020407000000000000000001020405000306071112082113143141222352536191D101000203010000000000000000000000000106030708051100020201030403010000000000000000010200030405061112213141143281B1FFDA000C03010002110311003F00B73D51F54874976838240B921707BFB7E6B8169A75D397A7526C37C9EDA54D5C5C082A49F4DE9632B536AB27A07812F4D0763539DA1FC9B3EEC091181E373CD722C29ACC3650F0DCDB0B1DEB65CD1F50FDD32AB0600CA46EA8D56321F4788BAFAEBD33C96DEAF23276ED2F3868A4F12500902AB36198664193EA0B38C8D8EBEAB8BBC904F03F0F7A41CEA5C65B0E3C99AE36BEA58EDB7ABB3A870ABDFF002376D2BC61EC0684C5463DB9F36D584F204771D8516F9157DC14F55A15402654CDC85B72AC71E093FD98F3D8E42E4512A6B30C2D39B641ECB4EF4398BE94E070122A7B1700DED5DDFD788FE506A519C311DE1A351CAA31DA947214FA86C004A025236006C054D4F3973FFFD9

что не равно строке, которую выдаёт Акробат
Код:
fffffefafffefdf9fff7fffefff8fffffffcfffffffdfafffffbf2fdfffbf2f6fff6efebfff2ebe3fff2ebe1fff5ede4fffaf1edfffcf6f9fffefffffffefffffffdfffdfffefffdfffffefffffefdfffffefefbfffffffcfffafffffff9fffdfffdf7fbfff9edf2fff4dce2fff1d2d4ffedcac5ffe9c6bfffeac7bfffefccc5fff2d4d2fff5e0e2fffaf1f3fffaf6f6fffdfdfbfffffffdfffffefffffefdfffffcfefdfffefffffffffffdfff8f5effff5e0dfffefcccbffe8b0afffe49a97ffdf8f86ffdd8b83ffde8b84ffe2928effe5a3a4ffebbbbafff2d4d1fff7e8e3fffcf5f3fffefdfefffffefffffefffffffdfffffffdfffffffcf6f3fff5ded8ffecbeb9ffe49a94ffde7970ffda6354ffd45644ffd55443ffd65446ffda5a52ffdc6d6affe08985ffe7ada3fff0cdc5fff7e5e6fffcf6f7fffefdfdfffefffffffffffffffafafafff6e4e0ffecbfbbffe2938cffdb695cffd44d38ffd54226ffd13d1cffd43d1dffd53c1effd73e27ffd84638ffd45a4fffdd7f70ffe6a799ffefcccffff8e9e9fffdf8f7fffefffbfffefbfbfff5ededffefcac6ffe49b97ffdc6c62ffd84934ffd53d1bffd53b15ffd53b13ffd73b14ffd73a14ffd73a17ffd73c1fffd1402affd85844ffdd816bffe8b1b5fff3dad8fffbf3f0fffffff8fffbf3f1ffefe2deffe8b0adffda7a74ffd84e42ffd73e20ffd73a14ffd73a12ffd63b12ffd73b13ffd73a14ffd73a16ffd73a19ffd73b1affd74328ffd66245ffe2969cffeccac7fff9ece7fffefdf4fff9eee9ffeddad5ffe4a09dffd1655fffd74130ffd73b19ffd73a13ffd73a11ffd03910ffd33a12ffd73a14ffd73a17ffd73a18ffd73915ffd43d1bffd75131ffda8589ffe4bdb9fff7e5dffffdf9eefff6e2e6ffeacdcfffe18e86ffd95842ffd03f17ffcf3a10ffd13a10ffd33a12ffd73a17ffd73a17ffd73a18ffd73a15ffcf3912ffca3811ffce3a15ffd74525ffd77070ffe7aaabfff3dacefffaf1e7fff4dde5ffe7c6ccffe08582ffd7513fffd33c16ffd23910ffd63a12ffd73a13ffd73a17ffd73917ffd73a17ffd73a16ffd53a15ffd23a14ffd33a16ffd74125ffd66b6cffe6a7a8fff2d7ccfffaf1e7fff6e2e9ffe8c9d0ffe08987ffd65345ffd63d19ffd53a14ffd73a15ffd73b16ffd73a19ffd73a17ffd73a16ffd73a16ffd73b17ffd43a16ffd53b18ffd74029ffd5696dffe4a5a7fff2d4cbfffaefe5fff7e6e8ffe5d0d1ffe2948dffd35e4dffd4401fffd13a15ffd43a13ffd53b14ffd03915ffd03914ffd33a13ffd23a12ffd23a13ffce3912ffd13b18ffd74531ffd87379ffe8aeb0fff3d9d0fffaf0e8fff9ecebffeed9d8ffe5a49bffd96f5fffd7482cffd33c19ffd63a14ffd53a13ffd23a13ffd33a13ffd73b11ffd63b11ffd33a10ffd13914ffd6401fffd95444ffdf868fffecc0c2fff7e7dffffdf8f2fffcf5f9fff7e6eaffebbab4ffe0877bffd95845ffd74025ffd73b19ffd53a15ffd63a14ffd73a13ffd73b11ffd73a11ffd73b13ffd73d1cffd84831ffdc6d63ffe49ea7fff2d5d6fff9f5edfffffef9fffefbfffff9f3fafff2d5cfffe7aaa2ffde7b6fffd95446ffd4422effd23c22ffd03a1cffd33a18ffd73b16ffd73b17ffd73f21ffd54a35ffd66654ffe2928bffebbcc3fff7e7e9fff7fdf6fffbfffdfff3fefffff1fefffff5f2e9fff1d1c8ffe6a89dffde7b72ffda5d54ffd74d41ffd24733ffd3432bffd74227ffd7452cffd95240ffdb6a5dffdd9181ffebc2b5fff2d6dafffcf5f8fff6fefbfff6fefefffefffffffdfefdfffcf7f5fff8e8e5fff1d0ccffe9b4b1ffe39893ffdf7f79ffdc6c66ffdb6962ffda6b65ffdd7471ffdd8b8bffe6a6a8ffecbfc1fff2d4d6fff5f5f5fffcfcfcfffffffffffffffffffcfffffffcfffffffefffefffdfaf6fff7eee8fff4ded7ffeeccc3ffeabab1ffe7a9a1ffe5a69effe5a79fffe8aea9ffecc0bcfff2d4d1fff7e6e5fffcf4f4fff9f9f9fffefefefffffffffffffffffffffefffffefdfffffcfffffffcfffffffafffdfff9fef8fff7f6effff2ebe4ffecddd4ffebd9d2ffedd9d2fff2ded7fff4e8e3fff8f1eefff8fbfafffdfffefffefefefffffffffffffffffffefefefffefbfdfffdfafcfffefdfffffffffffffbfffffffcfffffffbfefffff8f7f8fffcf6f6fffbf4f3fffbf3f2fffcf7f6fffefbfcfffefdfffffefffffffefffffffffffffffffffffffffffffffefefe
 
что не равно строке, которую выдаёт Акробат
Я ж говорю, акробат принимает неупакованный RAW четыре байта на пиксел (альфа+RGB) а HEX редактор - кодированый жпег.
Фотошопом пересохраните как RAW и перекодируйте в текстовую строку - а кто обещал, что просто будет? ;)
 
  • Спасибо
Реакции: shadowbat
Последнее редактирование:
У меня получилось, причем, даже для ридера DC
Код:
var myIconStream = "FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF684B08FF433410FF684B08FF433410FF684B08FF433410FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF5F4914FF6F560AFFA78A11FFDBAE10FFEFCC19FFEFCC19FFD8A70DFFAD7D07FF6C4E07FF684B08FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF5F4914FF9A7E10FFF1CF1AFFF8DB1EFFF8DB1EFFF8DB1EFFF8DB1EFFF2D11BFFF1CF1AFFE6BC14FF9B7107FF684B08FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF5F4914FFCE9D0BFFF8DB1EFFF8DB1EFFF8DB1EFFFCE120FFFCE120FFF8DB1EFFF8DB1EFFF8DB1EFFF1CF1AFFE6BC14FFBD8C09FF684B08FF000000FF000000FF000000FF000000FF000000FF684B08FFB48D0EFFF1CF1AFFF8DB1EFFFCE120FFFCE120FFFCE120FFFCE120FFFEE522FFF8DB1EFFEFD11CFFEFCC19FFEFCC19FFE6BC14FFAD7D07FF684B08FF000000FF000000FF000000FF000000FF6F560AFFF1CF1AFFF8DB1EFF433410FF433410FF433410FFFEE522FFFEE522FFFEE522FFFEE522FF433410FF433410FF433410FFE9C216FFDEAF10FF684B08FF000000FF000000FF000000FF433410FFBD8C09FFF6D71DFF433410FFFCE120FFFEE522FFFCE120FF433410FFF8DB1EFFFEE522FF433410FFFEE522FFF8DB1EFFF8DB1EFF433410FFE2B712FFAD7D07FF684B08FF000000FF000000FF684B08FFE2B712FFF6D71DFFFCE120FFF8DB1EFFFCE120FFFEE522FFFCE120FFFEE522FFFEE522FFFEE522FFFEE522FFEFD11CFFF8DB1EFFEBC617FFDEAF10FFCE9909FF433410FF000000FF000000FF433410FFEFCC19FF433410FF433410FF433410FF433410FF433410FF433410FF433410FF433410FF433410FF433410FF433410FF433410FF433410FF433410FFCE9909FF684B08FF000000FF000000FF684B08FFEBC617FF433410FFFFFFFFFFF5F9FDFFE4E5E3FF433410FFF5F9FDFFEFF2F4FFE4E5E3FFE4E5E3FF433410FFEFF2F4FFE4E5E3FFE4E5E3FF433410FFD49F0BFF433410FF000000FF000000FF433410FFDEB110FF433410FFFFFFFFFFF5F9FDFFEEF1F2FF433410FFF5F9FDFFF5F9FDFFE4E5E3FFE4E5E3FF433410FFF5F9FDFFE4E5E3FFE4E5E3FF433410FFBB8A09FF684B08FF000000FF000000FF5F4914FFAD7D07FF433410FFFFFFFFFFF5F9FDFFE4E5E3FF433410FFF5F9FDFFF5F9FDFFE4E5E3FFE4E5E3FF433410FFF5F9FDFFE4E5E3FFE4E5E3FF433410FF9B7007FF5F4914FF000000FF000000FF000000FF6C4E07FFE6BC14FF433410FFFFFFFFFFEEF1F2FF433410FFF5F9FDFFFFFFFFFFE4E5E3FFE4E5E3FF433410FFF5F9FDFFEEF1F2FF433410FFD49F0BFF6C4E07FF000000FF000000FF000000FF000000FF5F4914FFAD7D07FFE6BC14FF433410FFE4E5E3FF433410FFFFFFFFFFF5F9FDFFE4E5E3FFE4E5E3FF433410FFF5F9FDFF433410FFD49F0BFF9B7007FF433410FF000000FF000000FF000000FF000000FF000000FF684B08FFBD8C09FFE2B712FF433410FF433410FFF5F9FDFFF5F9FDFFE4E5E3FFE4E5E3FF433410FF433410FFD49F0BFFBB8A09FF684B08FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF433410FF9A6F07FFD9A70DFF433410FF433410FF433410FF433410FF433410FF433410FFCE9909FF9A6F07FF433410FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF5F4914FF6C4E07FF9B7007FFCE9909FFD49F0BFFD49F0BFFCE9909FF9A6F07FF6C4E07FF5F4914FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF433410FF684B08FF433410FF684B08FF433410FF5F4914FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000" ;
var oIcon = { count: 0, width: 20, height: 20, read: function(nBytes){return myIconStream.slice(this.count, this.count += nBytes)}, GetIcon: function() {this.count = 0; return this;} };
function helloWorld(){app.execMenuItem ("FitVisible");}
app.addToolButton({cName: "1", cLabel: "1", oIcon: oIcon, cExec: "helloWorld()"});
 
  • Спасибо
Реакции: shadowbat
Подробная инструкция:
1) Создаем в фотошопе RGB файл 20x20 (я так понимаю, размер не критичен) с альфаканалом.
2) Конвертируем в мультиканал, альфаканал ставим на первое место (перед Red)
3) Сохраняем как RAW Interlaced
4) Чтобы не ставить лишнюю прогу лезем на онлайн конвертер и скармливаем ему наш RAW, конвертируя в режиме HEX
5) Полученную строку вставляем в нужное место myIconStream, ну и размеры, разумеется, правильные делаем
 
  • Спасибо
Реакции: shadowbat
теперь минут 30 буду гуглить первые 3 пункта, уже минут 10 этим занимаюсь
 
Что именно неясно по первым трем пунктам?
Как в фотошопе файл создать и сохранить????
Так вы ж, вроде, в сообщении #16 написали что получилось? %8
 
  • Спасибо
Реакции: shadowbat
Статус
Закрыто для дальнейших ответов.