2born (2born) wrote,
2born
2born

Categories:

Полезное!!!

Оригинал взят у nabbla1 в ImageGraph2Txt v. 0.2 - нужны тестеры!
Чуть меньше года назад я писал о своей программке оцифровки графиков ImageGraph2Txt v. 0.04. Вот сейчас появилась версия 0.2. Основной функционал остался без изменений - загрузить картинку, обрезать, обозначить оси и отметить точки, и программа сохранит в текстовый файл пары "X-Y" в тех единицах, что отмечены по осям.

Главное отличие новой версии - она стала более дружественной к пользователям. Моя главная гордость - это undo/redo на неограниченное число шагов, причем вся история изменений сохраняется в файл проекта. Открыв его много времени спустя и вообще на другом компьютере, можно по-прежнему отменить сколько угодно действий. Я вообще не знаю других программ, где такое было бы реализовано. Ну и еще много чего:
- Появились кнопки undo/redo и история изменений. Работает на неограниченное число шагов назад и вперед. Отменять можно все действия, кроме "новый проект" и "открыть проект" - если текущий не был сохранен, он будет утерян. И только на этих операциях, если можно потерять данные, задается вопрос - хотите ли продолжить.
- Вся история изменений сохраняется в файле проекта. То есть, можно закрыть программу, потом позже загрузить проект и команды undo/redo будут по-прежнему работать, хоть до самого первого действия - загрузки изображения. В настройках можно и отключить сохранение вместе с undo, места они, конечно занимают. Но надо сказать, не очень много. Команда "добавить точку" хранит только 2 координаты - куда она была добавлена. "Обрезать картинку" - прожорливее, она внутри себя сохраняет все "обрезки", но центральную область не хранит - а зачем? Для сохранения любых картинок используется формат png (для графиков это, пожалуй, оптимально), но ВСЕ данные хранятся ровно в одном файле. По умолчанию он текстовый, но можно выбрать бинарный - он занимает примерно в 2 раза меньше памяти.
- При закрытии программы она не задает никаких вопросов, закрывается и все. Зато при последующем открытии она открывается в точности с того же места - помнит все действия (их можно отменить), выбранный инструмент и даже, если в данный момент вы отмечали область для обрезки - он отобразит рамочку этой области. Единственное, что сейчас не запоминается - это текущий масштаб, хотя и это сделать несложно. Не знаю только, надо ли?

Тут вообще есть одна тонкость - если одновременно запущено несколько копий программы, то каждая, закрываясь, будет сохранять свои данные в один и тот же файл, current_project.txt в папке программы, затирая предыдущие данные, которые там были. Как сделать иначе - я пока не придумал. Довольно разумная идея была такая: если было открыто несколько копий, каждая сохранит свое состояние под своим именем, а при последующем запуске откроются сразу все. Но тогда, если мы их снова по одной закроем и потом однажды запустим - снова откроются все! Как вариант - для лишних окон делаем "новый проект", и пустое место она не сохранит - незачем. И в следующий раз не откроется лишнее окно. Но как-то немножко странно это. Но с другой стороны, наконец-то кнопка "новый проект" станет востребована!

А хочется что-то придумать: ведь далеко не всегда программу закрывает сам пользователь и далеко не всегда у него есть время обдумать, что куда сохранить. Бывает - надо срочно компьютер выключить, а столько всего открыто, и каждая программа начинает задавать мильон вопросов при закрытии... Поэтому сама идея закрываться молча мне нравится, надо только довести ее до ума.

- Минимум лишних вопросов и закрашивание серым ненужных на данный момент кнопочек. Если мы только открыли программу, не работает кнопка "новый проект" (он и так новый) и "сохранить" (сохранить нечего). Если мы что-то сделали и сохранили, "сохранить" снова посереет. Сделаем undo, потом передумаем и снова redo - "сохранить" опять посереет, потому что ровным счетом ничего не изменилось! При сохраненном проекте можно с чистой совестью создать новый или открыть - раз все сохранено, никаких вопросов программа не задаст, откроет и все. Но если уж вопрос был задан - значит, по делу!

- Полная независимость различных инструментов. Первые версии работали как wizard, по шагам. Сначала - загрузим откуда-нибудь картинку и слегка ее обрежем. Потом - выделим оси и отметим точки на них. И лишь потом отметим точки, после чего сохраним. Возвращаться к предыдущему шагу можно было, но только рискуя потерять/исказить данные шага текущего. То есть, при обрезании картинки и оси, и точки данных переставали совпадать с рисунком, поскольку сохраняли те же координаты в пикселях.

Теперь же действия можно делать в любом порядке - все будет пересчитано как надо.

- Масштабирование и прокрутка. Вовсю используется колесико мыши. Просто его вращение - это прокрутка вверх-вниз. С шифтом: влево-вправо. С Ctrl: увеличение/уменьшение. Ну и конечно, есть полосы прокрутки и меню масштаба.

- Удобный "фотошоповский" инструмент crop: сначала выделяем рамочку, после чего можем произвольно ее подвигать (подводя мышку к краю рамочки с нужной стороны), и только после этого нажатием на центральную область - обрезаем края. А щелчок вне рамки снимает выделение.

Конечно, это стрельба из пушки по воробьям, такую простую, в сущности, программу снабжать столь мощным интерфейсом. Просто эта программка очень удобна в качестве "подопытного кролика", на которой я учусь писать довольно сложные прикладные программы. С одной стороны, она еще довольно проста, чтобы с непривычки не запутаться. Но уже нетривиальная, в ней паттерны проектирования и возня со структурами данных, инкапсуляцией, наследованием и пр. не вырождается в бессмысленные foo.bar().

Я очень надеюсь, что весьма приличный кусок кода отсюда смогу использую в дальнейшем в других своих программах - все, что касается сериализации структур данных (когда дерево объектов с кучей дополнительных связей между собой "разворачивается" в текстовый документ, а впоследствии может быть построено вновь автоматически), абстрактных команд и инструментов, undo/redo, и прочего.

И отчасти поэтому буду очень рад, если эту программу кто-нибудь потестит)

Установки программа не требует, запускается с одного голого .exe-шника, скачать его можно здесь (500 кБайт), а вот ее исходники.
Tags: графотворчество невидимого профессора, наука, образование, техника
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 6 comments