惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Last Watchdog
The Last Watchdog
The GitHub Blog
The GitHub Blog
博客园_首页
Engineering at Meta
Engineering at Meta
B
Blog
罗磊的独立博客
美团技术团队
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
L
LangChain Blog
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
G
Google Developers Blog
Martin Fowler
Martin Fowler
Vercel News
Vercel News
大猫的无限游戏
大猫的无限游戏
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Palo Alto Networks Blog
L
LINUX DO - 热门话题
T
Threatpost
IT之家
IT之家
P
Proofpoint News Feed
aimingoo的专栏
aimingoo的专栏
Recent Announcements
Recent Announcements
月光博客
月光博客
B
Blog RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
博客园 - 叶小钗
A
Arctic Wolf
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Know Your Adversary
Know Your Adversary
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
S
Schneier on Security
Cisco Talos Blog
Cisco Talos Blog
博客园 - 【当耐特】
V
Vulnerabilities – Threatpost
量子位
Project Zero
Project Zero
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
Help Net Security
Help Net Security
Google Online Security Blog
Google Online Security Blog
Security Latest
Security Latest
W
WeLiveSecurity
Simon Willison's Weblog
Simon Willison's Weblog
爱范儿
爱范儿

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
PaintCAD Mobile 3.0.24 — графический редактор для Android 2.3+ и J2ME
Дмитрий Тимофеев · 2026-06-18 · via Все публикации подряд на Хабре

Простой

18 мин

43

Это путешествие длиной в год началось 14 июня 2025 года. Я был счастливым обладателем вот этого андроид-телефона Xiaomi Duoqin F22 Pro с кнопочной клавиатурой и Android 12. Экран у него был 640x960 пикселей. Клавиатура как у любого старого телефона - с двумя контролируемыми под андроидом софт-клавишами и кнопкой "Взять трубку", цифровой клавиатурой и джойстиком. И хоть рисовать на нем с этой клавиатуры было удобно как на сименсах 20 лет назад - мощность у него была совсем средняя.

Xiaomi Duoqin F22 Pro лежит на деревянном столе

Xiaomi Duoqin F22 Pro лежит на деревянном столе

Хотелось запускать на телефоне нелагающие виртуальные машины со старыми Windows (через LBochs, например, хоть на него многие и косо смотрят из-за скорости работы новых Windows, но XP там идет хорошо), играть в нелагающие игры. И вот я подобрал по цене/мощности неклавиатурную лопату Xiaomi Redmi Turbo 3 (он же Poco F6). Там уже был экран 1220x2712 пикселей и, на тот момент, Android 14, который после покупки сразу обновился до Android 15 (а сейчас уже он дообновлялся до 16).

И вот Xiaomi Redmi Turbo 3 пришел из Китая. Все идеально и быстро работало. И потом пришла очередь проверить PaintCAD на нем в деле.

Гугл сломал меню

PaintCAD показывал все меню в Android через прослойку Microemu, а она их отображала как OptionsMenu из Android.view.Menu. И попробовав на новом телефоне сохранить файл я не смог это сделать - меню показывалось только по вызову в первый раз (например, чтобы вызвать "Обзор..." и выбрать файл при открытии файла), а потом уже нет (и даже Ок уже не нажать в окошке ввода пути+имени файла).

Оказывается, с Android 13 гугл придумал что по закрытию меню (после первого вызова) надо обязательно перед следующим вызовом меню вызвать invalidateOptionsMenu().

Получается, я сидел с Android 12 и думал что PaintCAD работает на всех андроидах одинаково, а он вообще не работает на новых версиях андроида. Получается, это вносит несовместимость старых android-программ с новыми андроидами и старые программы с меню не смогут заработать на новых андроидах, и если никто их больше не поправит (всякие проекты, переставшие обновляться) - они не смогут этого сделать никогда. Ладно там добавляют в новых андроидах новые функции, ладно объявляют старые как deprecated и рекомендуют пользоваться новыми, но вот так ломать посреди на 13-м андроиде то, что на предыдущих работало... Это был шок.

Проблема, созданная гуглом искусственно, была исправлена простым фиксом со stackoverflow и меню запоказывалось повторно:

	@Override
	public void onOptionsMenuClosed(Menu menu) {
	    super.onOptionsMenuClosed(menu);
	    //Build.VERSION_CODES.TIRAMISU = 33
	    if (Build.VERSION.SDK_INT >= 33) {
	        invalidateOptionsMenu();
	    }
	}

А почему экран такой большой

А потом я посмотрел на PaintCAD на экране 1220x2712, попробовал порисовать как обычно - это уже не 640x960 у Xiaomi Duoqin F22 Pro, и там-то было плохо видно, а тут ничего не видно же вообще, пиксели размером доли миллиметра...

Стало ясно что пользоваться этим уже нельзя совсем.

И если до этого казалось что мобильная версия PaintCAD никогда больше сильно меняться не будет (работает же как-то и ладно) - то после этого было решено ее всю перебрать и подправить.

За прошедший год с того июня 2025 по сегодняшний июнь 2026 были переделаны все окна, сделан более заметным интерфейс, добавлены различные приспособления, масштабирующие, помогающие, упрощающие рисование на таких разрешениях. Плюс добавлена гора новых функций (часть из них портированы из PaintCAD 4Windows, что здорово так приблизило мобильную версию к компьютерной), исправлена куча ошибок.

Выбор цвета на рисунке

Особенные мучения были, например, при выборе курсором цвета, на который будет применен какой-нибудь эффект.

Если рисуемая картинка была мелкой, 32x32, к примеру, то в давние времена выбор цвета на старом Siemens CX75 выглядел вот так - на экране 132х176 подкатываем красную точку-курсор в нужное место и жмем '5':

Старый добрый сименс с разрешением 132x176

Старый добрый сименс с разрешением 132x176

Если в окне рисования можно включить масштаб и разглядеть рисунок поближе, то в этих окнах типа выбора цвета и ему подобных рисунок всегда показывался в масштабе x1 (чтобы, например, при вставке одного изображения на другое - видеть их оба в нормальном масштабе и понимать где будет вставка и что будет вокруг). На новом же телефоне с экраном 1220x2712 это были пиксели размером с доли миллиметра, и никаких красных точек не разглядишь. Примерно вот так:

Выбор цвета на изображении 32x32 пикселя на большом экране

Выбор цвета на изображении 32x32 пикселя на большом экране

В более поздних версиях, когда сименсы стали превращаться в benq-siemens, а экран телефона 240x320 стал обычным делом - в PaintCAD появились настройки курсора и можно было выбрать курсор, например, в виде точки с кольцом вокруг (он побольше и его хорошо видно на 240x320), или даже нарисовать вообще произвольный курсор и выбрать на нем активную точку, под какую-нибудь экзотическую задачу (например, чтоб он никогда не закрывал собой пиксели с определенной стороны от него):

Пункт настроек курсора в меню настроек

Пункт настроек курсора в меню настроек

Окно настройки курсора с редактором курсора и выбором готового курсора из шаблонов

Окно настройки курсора с редактором курсора и выбором готового курсора из шаблонов

Но на разрешении 1220x2712 при экране с диагональю 6-7 дюймов что курсор в один пиксель, что курсор с кольцом 5x5 пикселей - не видны.

Решение было подобрано следующее: в компьютерной версии PaintCAD есть на окне "Лупа 11x11", она показывает область размером 11x11 пикселей вокруг курсора:

Область увеличения 11x11 пикселей вокруг курсора в PaintCAD 4Windows

Область увеличения 11x11 пикселей вокруг курсора в PaintCAD 4Windows

Теперь по кнопке "Звездочка" подобная область включается и в PaintCAD Mobile - и в окне выбора цвета, и в других подобных окнах (выбор выделения, вставка изображения на рисунок). Над ней показываются текущие координаты курсора. А вместо мелкого курсора рисуются две толстые пунктирные линии до краев экрана чтобы было ясно где сейчас курсор и какое место вокруг него показывает область 11x11:

В PCM 3.0 по кнопке "*" вместо мелкого курсора включается крестовина из толстых пунктирных линий и мини-лупа 11x11 пикселей, в которой видно что сейчас под крестовиной

В PCM 3.0 по кнопке "*" вместо мелкого курсора включается крестовина из толстых пунктирных линий и мини-лупа 11x11 пикселей, в которой видно что сейчас под крестовиной

Виртуальные пиксели и шрифты

Если взять телефоны сименс с разными размерами экранов (130x130, 132x176, 240x320) и внимательно изучить размеры шрифтов на них, то станет ясно что на экране обычно вмещается по вертикали хотя бы штук десять строк текста, а то и чуть больше.

Это значит что шрифты должны быть такого размера, чтобы эти 10 строк текста влезли в текущий экран. Теперь PaintCAD на старте смотрит как его запустили (если нажали клавишу - значит он управляется с физической клавиатуры и доступен весь экран, а если нажали на экран - значит полэкрана занято виртуальной клавиатурой и доступны полэкрана), и из доступного экрана рассчитывает размеры шрифтов чтоб около 10 строк влезли по вертикали.

А высота строк текста мелким шрифтом на тех же сименсах, допустим, 14 пикселей. Тогда эту высоту строки в пикселях надо поделить на 14 - это будет высота одного сименсовского пикселя.

Весь интерфейс паинткада рисуется теперь в таких сименсовских, или, как они названы в PaintCAD - виртуальных, пикселях, все толщины линий на элементах окон, их смещения для примыкающих друг к другу элементов и размеры - все это пересчитано с обычных пикселей на виртуальные.

В главном меню в подменю "Справка" вместо старого пункта показа объема свободной оперативной памяти появился новый пункт "Инфо о системе", в нем выводится информация о платформе, на которой запущен PaintCAD, параметры экрана, информация о свободной и занятой оперативной памяти и информация о доступных дисках (сколько свободно места и сколько всего). И на ее втором шаге под названием "Экран" можно посмотреть каким PaintCAD считает ваш экран в виртуальных пикселях:

Новый пункт "Инфо о системе"

Новый пункт "Инфо о системе"

В "Инфо о системе" на втором шаге "Экран" показывается размер экрана в виртуальных пикселях

В "Инфо о системе" на втором шаге "Экран" показывается размер экрана в виртуальных пикселях

Например, у Xiaomi Redmi Turbo 3, с показывающейся на полэкрана виртуальной клавиатурой, доступный для вывода окошек экран для PaintCAD кажется равным 135x126 пикселей, что похоже на квадратные экраны 128x128 или 130x130 пикселей, от этого должны быть ощущения что рисуешь на телефоне вроде Siemens C65.

Увеличиваем всё до размера виртуального пикселя

Теперь PaintCAD считает что экран моего телефона размером 135x126. Если целочисленно поделить реальную ширину/высоту экрана на ширину/высоту экрана в виртуальных пикселях, то получится что каждый виртуальный пиксель для это 9x9 реальных.

И вот этими виртуальными пикселями размером 9x9 реальных PaintCAD отсчитывает смещения компонентов от опорных точек на окне и размеры компонентов, рисует компоненты окон из линий такой толщины. Графика чтобы дотянуться до таких больших размеров - при загрузке масштабируется многократно по алгоритму advMame x2 пока не достигнет нужного размера. Главное окно из PaintCAD 2.7 beta 1 превращается в новое окно, где все из виртуальных пикселей, а значки большие и хорошо видны. И даже масштаб рисунка автоматически ставится при запуске равным виртуальному пикселю (это видно по x9 в заголовке):

Все линии в интерфейсе стали толщиной с виртуальный пиксель

Все линии в интерфейсе стали толщиной с виртуальный пиксель

Выбор кратного виртуальному пикселю масштаба рисунка

Тут пришла мысль, что чтобы без конца сидеть в виртуальных пикселях и окончательно почувствовать себя на старом телефоне низкого разрешения - надо сделать и выбор масштаба рисунка, кратный виртуальному пикселю, из которых нарисован интерфейс.

По "ДжойВправо" в окне рисования открывается, как обычно, меню команд. Первый пункт в нем - выбор масштаба рисунка "Лупа":

Выбор масштаба - первый пункт в меню команд

Выбор масштаба - первый пункт в меню команд

В этой "лупе" можно менять масштаб рисунка с шагом 1 по "ДжойВлево" и "ДжойВправо" и выставить совсем некратный виртуальному пикселю масштаб. Но если хочется увериться в том что ты рисуешь на телефоне с разрешением 135x126, то и масштаб рисунка надо менять кратно виртуальному пикселю. Если x9 это у меня на телефоне 1 виртуальный пиксель, то x18 это будет 2 виртуальных пикселя, x27 это 3 виртуальных пикселя и т.д.

Для быстрого переключения между разными масштабами в виртуальных пикселях чтоб, увеличивая масштаб, сразу прыгать от x9 к x18, потом к x27, были назначены клавиши "ДжойВверх" и "ДжойВниз". Кроме того помимо масштаба в реальных пикселях в этом окне теперь отображается масштаб и в виртуальных в виде "ВП xN". Если изменить масштаб на некратный виртуальному пикселю, то надпись вида "ВП xN" пропадает:

Отображение текущего масштаба картинки в виртуальных пикселях в виде "ВП xN"

Отображение текущего масштаба картинки в виртуальных пикселях в виде "ВП xN"

Также в окне лупы добавлены новые возможности управления масштабом:

  • по кнопке джойстика (надпись "Экран" на панели софт-клавиш) подбирается такой масштаб в реальных пикселях чтобы рисунок отображался максимально большим, но без появления полос прокрутки

  • по зеленой кнопке "Поднять трубку" подбирается такой же максимальный масштаб в виртуальных пикселях без появления полос прокрутки

  • по кнопкам "*" / "#" устанавливается минимальный/максимальный масштаб в виртуальных пикселях в пределах доступного диапазона масштабов

  • диапазон масштабов раньше был x1 - x50, в версии PaintCAD Mobile 3.0 он увеличен до x1 - x100, раз экраны смартфонов стали такими большими

Теперь можно нажать в окне лупы, например, "ДжойВверх" и масштаб сразу перепрыгивает с ВП x1 (x9) на до ВП x2 (x18):

После нажатия "ДжойВверх" масштаб в виртуальных пикселях изменяется с ВП x1 на ВП x2

После нажатия "ДжойВверх" масштаб в виртуальных пикселях изменяется с ВП x1 на ВП x2

И в окне рисования рисунок отображается точками размером 2x2 виртуальных пикселя:

Выставлен масштаб ВП x2

Выставлен масштаб ВП x2

Теперь если менять масштаб только в виртуальных пикселях (по "ДжойВверх" / "ДжойВниз") в окне лупы, то пиксели картинки в окне рисования всегда будут кратны виртуальному пикселю. И будет еще больше казаться что рисуешь на экране низкого разрешения.

Масштабирование рисунков везде где их не видно - по кнопке "Звездочка"

А. Окно предпросмотра, вызываемое по красной кнопке "Положить трубку" виртуальной клавиатуры. Теперь в нем все, что отображается (а там бывает рисунок, бывает по "0" проверка стыковки текстур - 5x5 рисунков, бывает буфер по левой софт-клавише, бывает компаратор по кнопке "5") - по нажатию "*" все это масштабируется кратно до размеров экрана:

Предпросмотр мелкого изображения - теперь после нажатия "*" все станет видно

Предпросмотр мелкого изображения - теперь после нажатия "*" все станет видно

Б. Окно просмотра рисунка из файла под курсором в списке файлов, вызываемое в файловом менеджере по "1", позволяло просматривать файлы в масштабе x1. Теперь по кнопке "*" он кратно увеличивается до размеров экрана, а справа от имени файла появляется значок "изображение натянуто на экран" со стрелками во все стороны:

Мелкое изображение 4x4 пикселя после нажатия на "1" просматривалось в масштабе x1 (и ничего не было видно). В PCM 3.0 нажатие на "*" кратно масштабирует картинку до границ экрана - и можно ее рассмотреть.

Мелкое изображение 4x4 пикселя после нажатия на "1" просматривалось в масштабе x1 (и ничего не было видно). В PCM 3.0 нажатие на "*" кратно масштабирует картинку до границ экрана - и можно ее рассмотреть.

В. Окно обзора шрифта, вызываемое в главном меню "0" - "Шрифты" - "Обзор шрифта", показывало символы в масштабе x1. Теперь внизу на панели есть значок "изображение натянуто на экран" со стрелками во все стороны. Можно нажать джойстик, а можно и "*" - и картинка символа кратно растянется на всю доступную область окна:

В обзоре символов шрифта "*" или кнопка джойстика включает кратное масштабирование просматриваемого символа для удобного просмотра

В обзоре символов шрифта "*" или кнопка джойстика включает кратное масштабирование просматриваемого символа для удобного просмотра

Про новые возможности

Помимо масштабирования каждого окошка были и добавлены новые функции, поправлены ошибки. Основные из них:

А. Все обработки в главном окне выведены в отдельные потоки. Раньше когда, например, рисуешь гигантский закрашенный эллипс - все подвисало, а потом и крашилось (если очень большой эллипс на рисунке 3000x3000 точек), т.к. андроид думал что паинткад завис и аварийно закрывал его. Теперь наверху в заголовке рисуются песочные часы и надо ждать пока они пропадут - это значит что обработка закончена и можно рисовать дальше. За это время запустится поток, пройдет обработка, завершится поток и потом пропадут в заголовке часы (появится фиолетовый баллончик с буквами PC - обычный значок паинткада):

Рисуем большой закрашенный эллипс - в заголовке на короткое время появляются песочные часы пока он выводится на рисунок

Рисуем большой закрашенный эллипс - в заголовке на короткое время появляются песочные часы пока он выводится на рисунок

Б. В настройки добавлен пункт "Показ выделения", по умолчанию включен. И на самом рисунке в главном окне видны границы области выделения. Они полупрозрачные и поэтому видны на любых цветах:

Выделенная область видна на рисунке если включен "0" - "Настройки" - "Показ выделения"

Выделенная область видна на рисунке если включен "0" - "Настройки" - "Показ выделения"

В. Новая функция "Области" в меню команд ("ДжойВправо" в окне рисования). Портирована из PaintCAD 4Windows:

Добавляем текущую выделенную область в список. Потом можно добавить еще другую, третью и т.д.. А потом просто выбирать из списка одну из них - и она сразу будет выделена на рисунке. Очень удобно если нужно вырезать из множества картинок одинаковые фрагменты. Один раз добавил область в список, а потом открываешь картинки по очереди, выбираешь "ДжойВправо" - "Области" - нужную область, потом обрезаешь по "ДжойВправо" - "Фрагмент" и сохраняешь. И повторяешь это со всеми картинками:

Г. Инструменты "Линия" и "Полилиния" теперь отображают в заголовке окна рисования длину линии в пикселях и угол ее наклона в градусах. Теперь с помощью линий можно мерить расстояния между точками/объектами на рисунке, угол завала горизонта фото и т.п. величины:

"Линия" в процессе ее рисования теперь показывает в заголовке длину (здесь это 4 пикселя)  и угол наклона (здесь это 71,565 градуса)

"Линия" в процессе ее рисования теперь показывает в заголовке длину (здесь это 4 пикселя) и угол наклона (здесь это 71,565 градуса)

Д. Изменение размера рисунка через "Размер растра" в меню команд - теперь предлагает на выбор 3 метода - Обычный, Умный и Сглаженный (портировано из PaintCAD 4Windows). Вызываем в окне рисования по "ДжойВправо" - "Размер растра" изменение размера рисунка. Он теперь спросит не только новый размер рисунка, но и "Метод масштаба": Обычный - простой и быстрый, как раньше. Умный - с умом сжимает/растягивает малоцветные картинки (пиксель арт). Сглаженный - сжимает/растягивает картинку со сглаживанием (с линейной интерполяцией, для фоток).

Выбор метода сжимания/растягивания рисунка при вызове "Размера растра" в меню команд ("ДжойВправо"

Выбор метода сжимания/растягивания рисунка при вызове "Размера растра" в меню команд ("ДжойВправо"

Е. Поворот рисунка теперь может поворачивать на любой угол, методами Обычный, Умный и Сглаженный, пропускать указанный "прозрачный цвет" и дополнительно закручивать углы (портировано из PaintCAD 4Windows).

Пусть есть такая картинка как показана ниже. Выделим ее часть, которую будем вращать (все что закрашено рыжим):

Исходная картинка до применения новой функции "Повернуть"

Исходная картинка до применения новой функции "Повернуть"

Вызывая в окне рисования меню выделения и буфера обмена по "#" и выбирая там "Повернуть" - увидим вместо простого поворота на 90 градусов вот такой интерфейс с крутящейся картинкой-образцом, под ней указан угол поворота общий (хоть миллион градусов), а в скобках такой же, обрезанный до пределов 0-359,9 градусов:

Окно выбора угла поворота

Окно выбора угла поворота

Виртуальная клавиатура покажет значками на кнопках как им управлять:

  • 4 и 6 - медленный поворот с шагом 0,1 градуса;

  • 1 и 3 - побыстрее поворот с шагом 1 градус;

  • 7 и 9 - быстрый поворот с шагом 15 градусов;

  • 2 и 8 - поворот с шагом 90 градусов

  • Джойстик - сброс угла поворота на 0 градусов

Значки на виртуальной клавиатуре показывают как выбирать угол поворота

Значки на виртуальной клавиатуре показывают как выбирать угол поворота

После выбора угла поворота будет запрошен прозрачный цвет (пиксели этого цвета не будут исчезнут из выделенной области и не будут перенесены в повернутое изображение):

Выбор прозрачного цвета, который не будет перенесен в повернутое изображение, а просто исчезнет

Выбор прозрачного цвета, который не будет перенесен в повернутое изображение, а просто исчезнет

Потом будет запрошен метод поворота - три метода как у "размера растра" - Обычный, Умный и Сглаженный:

Потом паинткад спросит метод закручивания углов. Если выбрать "Нет" - будет просто поворот. А другие методы - подкручивают углы по разным математическим законам:

Выбор метода закручивания углов при повороте картинки

Выбор метода закручивания углов при повороте картинки

И паинткад выдаст результат поворота (можно отменить нажатием кнопки "ДжойВверх"):

Изображение после поворота с выбранными параметрами

Изображение после поворота с выбранными параметрами

Разные методы закручивания дают разные результаты, можно, например, закрутить фото в такой "портал":

Ж. "Сканлайн" в меню эффектов заменен на "Расширитель" - пакет из 22 различных эффектов обработки/масштабирования изображений (включает в себя и бывший сканлайн) (портировано из PaintCAD 4Windows)

В меню эффектов (по кнопке "*" в окне рисования) вместо "Сканлайна" теперь лежит "Расширитель":

"Расширитель" в меню эффектов

"Расширитель" в меню эффектов

Внутри 22 метода на выбор (сначала сканлайн, потом все остальные):

Выбор метода Расширителя

Выбор метода Расширителя

Если взять мелкую картинку:

Исходное изображение перед применением Расширителя

Исходное изображение перед применением Расширителя

То расширитель по алгоритму "advMame3x" даст увеличенное в 3 раза изображение с подбором углов наклона линий - можно красиво увеличивать малоцветные картинки, скриншоты из игр со старых приставок и т.п.:

Диск после увеличения в 3 раза методом расширителя advMame3x

Диск после увеличения в 3 раза методом расширителя advMame3x

А расширитель по методу "Ручной х2" уменьшит количество цветов до выбранного и изобразит его в линиях толщиной 2 пикселя, как будто кто-то нарисовал его рукой:

Так метод расширителя "Ручной" видит диск после ручной прорисовки линиями толщиной 2 пкс

Так метод расширителя "Ручной" видит диск после ручной прорисовки линиями толщиной 2 пкс

Методов "Расширителя" много (22 штуки), каждый дает совершенно различные результаты.

З. И еще многое другое

Например, палитру теперь можно сохранять в PAL файлы и загружать из них, а после загрузки сразу внедрить ее на рисунок (перерисовать все пиксели рисунка на цвета из загруженной палитры). Еще в окне палитры можно нажать "0" и выбрать одну из стандартных палитр (ZX Spectrum, DOS VGA и прочие), и тоже, если нужно, сразу внедрить ее на рисунок:

После нажатия кнопки "0" в окне палитры - кнопками "ДжойВлево"/"ДжойВправо" выбираем одну из стандартных палитр и ставим ее вместо текущей ("Выбор") или ставим плюс внедряем на рисунок ("Внедрить")

После нажатия кнопки "0" в окне палитры - кнопками "ДжойВлево"/"ДжойВправо" выбираем одну из стандартных палитр и ставим ее вместо текущей ("Выбор") или ставим плюс внедряем на рисунок ("Внедрить")

Еще эффект "Мозаика" теперь может раскидать изображение из буфера не только строго по сетке на рисунок, но и случайно (например, заполнить нарисованный пляж камешками в разных случайных местах пляжа).

Еще появились новые эффекты. Например, "Цветная шерсть" (портирован из PaintCAD 4Windows) в "Доп.эффектах" рисует шарф из случайных разноцветных ниток в пределах текущего выделения:

Новый эффект "Цветная шерсть" по вызову "*" - "Доп.эффекты" - "Цветная шерсть" в окне рисования

Новый эффект "Цветная шерсть" по вызову "*" - "Доп.эффекты" - "Цветная шерсть" в окне рисования

Под андроидом теперь можно фотографировать с камеры и загружать фотки в паинткад.

А еще теперь можно через "0" - "Обработка" - "Снять 3GP/MP4 кадр" открывать 3GP/MP4/AVI-файлы и сохранять из них отдельные кадры в файл или загружать сразу в паинткад (в ходе тестов оказалось, что разные версии андроида успешно грузят одни форматы, и совсем неуспешно или в виде мусорных кадров грузят другие форматы, но как-то оно работает):

Выбор и извлечение кадров из видеофайлов через "0" - "Обработка" - "Снять 3GP/MP4 кадр"

Выбор и извлечение кадров из видеофайлов через "0" - "Обработка" - "Снять 3GP/MP4 кадр"

Виртуальная клавиатура при этом значками подсказывает как перематывать видео медленно, побыстрей, совсем быстро, перейти в начало, середину или конец видео. По кнопке "#" можно даже запустить проигрывание видео чтобы потихоньку доехать до нужного кадра:

Виртуальная клавиатура при извлечении кадров из видеофайлов

Виртуальная клавиатура при извлечении кадров из видеофайлов

BMX-плеер ("ДжойВправо" - "Плеер BMX" в окне рисования) для проигрывания анимированных 4-кадровых BMX-анимаций (из сименсов и прочих мобильных телефонов) переработан, и может даже сразу превращать эти старые BMX в GIF-анимации с выбранной по джойстику скоростью 0,5x, 1x или 2x (функция "В GIF" на правом софте). Раньше BMX были чернобелыми, но можно их раскрасить - и они станут цветными:

BMX плеер показывает цветной 4-кадровый BMX-файл

BMX плеер показывает цветной 4-кадровый BMX-файл

В окне обновления "0" - "Справка" - "Обновление" теперь видны и доступный релиз, и доступная бета, и по клику на экране (или по нажатию софт-клавиш) под андроидом можно скачать новую версию:

В окне обновления: под андроидом можно скачать релиз или бету, а в яве - только посмотреть, качать придется вручную

В окне обновления: под андроидом можно скачать релиз или бету, а в яве - только посмотреть, качать придется вручную

Настройка клавиш управления под любой телефон

Если у вас кнопочный Android или кнопочный телефон с Java, или даже кнопочная игровая android-консоль - то у всех них бывают разные кнопки, в разном количестве, в разных местах устройства. Паинткад можно запускать как на всяких ретро-устройствах (цифровой детокс!):

Joy's S15 (Android 4.4, 128x160), Alcatel One Touch 916D (Android 2.3, 320x240), МТС Qwerty 665 / Alcatel OT-902 (Java, 6 Мбайт памяти в яве, 320x240), китайская Nokia C1-02 без камеры и Wi-Fi для работ на всяких режимных объектах (Java, 2 Мбайт памяти в яве, 128x160)

Joy's S15 (Android 4.4, 128x160), Alcatel One Touch 916D (Android 2.3, 320x240), МТС Qwerty 665 / Alcatel OT-902 (Java, 6 Мбайт памяти в яве, 320x240), китайская Nokia C1-02 без камеры и Wi-Fi для работ на всяких режимных объектах (Java, 2 Мбайт памяти в яве, 128x160)

так и на современных на кнопках (например, Xiaomi Qin F21/F22/F23 на Android) и на qwerty-клавиатурах.

Чтобы назначить на таком устройстве клавиши - в PaintCAD Mobile 3.0 была добавлена полноценная настройка клавиш.

Для того чтобы ее вызвать - нужно долго держать любую физическую клавишу (кроме клавиш громкости) на самом первом экране после запуска с эмблемой BS Studios и надписью наверху "Зажми кнопку: конфиг". По прошествии некоторого времени паинткад попросит клавишу отпустить и перейдет в настройку клавиш:

Нажмите и не отпускайте любую физическую клавишу (кроме кнопок громкости) для вызова настройки клавиш. А потом когда напишет "Отпустите" - отпустите

Нажмите и не отпускайте любую физическую клавишу (кроме кнопок громкости) для вызова настройки клавиш. А потом когда напишет "Отпустите" - отпустите

А второй вариант входа в настройку клавиш, если паинткад уже запущен с управлением физическими клавишами - через вызов в главном меню "0" - "Настройки" - "Чем рисуем...":

Второй вариант входа в настройку клавиш - пункт "Чем рисуем..." в настройках при запуске паинткада с управлением с физических клавиш (без виртуальной клавиатуры)

Второй вариант входа в настройку клавиш - пункт "Чем рисуем..." в настройках при запуске паинткада с управлением с физических клавиш (без виртуальной клавиатуры)

При входе в настройку клавиш паинткад не знает ничего об устройстве. Может быть это устройство с кнопочной телефонной клавиатурой, может быть это qwerty-смартфон, может быть игровая консоль, а может вообще что-нибудь экзотическое. И не знает вашего предпочитаемого языка - Русский или Английский.

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

1/4: Паинткад просит текстом наверху экрана зажать и не отпускать клавишу джойстика

1/4: Паинткад просит текстом наверху экрана зажать и не отпускать клавишу джойстика

2/4: Паинткад просит зажать и не отпускать клавишу "ДжойВверх"

2/4: Паинткад просит зажать и не отпускать клавишу "ДжойВверх"

3/4: Паинткад просит зажать и не отпускать клавишу "ДжойВниз"

3/4: Паинткад просит зажать и не отпускать клавишу "ДжойВниз"

После этого паинткад спросит какой язык интерфейса настройки клавиш нужен - Русский или Английский:

4/4: Выбор языка интерфейса настройки клавиш с помощью только что выбранных клавиш "ДжойВверх" / "ДжойВниз" / "Кнопка джойстика"

4/4: Выбор языка интерфейса настройки клавиш с помощью только что выбранных клавиш "ДжойВверх" / "ДжойВниз" / "Кнопка джойстика"

После этого настройка клавиш, наконец-то, включает все свои функции. Кнопками "ДжойВверх" / "ДжойВниз" / "Кнопка джойстика" можно выбрать одну из клавиш для настройки. При этом подгрузится стандартная раскладка по автоопределенной модели вашего телефона/смартфона и коды будут уже установлены:

Наверху слева есть рыжая кнопка "..." - это вызов меню. Сначала фиолетовый фокус будет стоять на ней. Нажмите "ДжойВниз"/"ДжойВверх" чтобы катать фокус по вертикальным рядам и выбирать клавиши для настройки.

Голубая кнопка "О" над джойстиком - это кнопка камеры, вызывающая функцию "Фото" для фотографирования и затаскивания снятого изображения в паинткад для редактирования/сохранения. На нее тоже можно назначить одну из физических кнопок вашего телефона.

Короткое нажатие на "Кнопку джойстика" - перейти в режим установки кода выделенной фиолетовым клавиши, а долгое нажатие на "Кнопку джойстика" - стирание кода с выделенной фиолетовым клавиши.

В режиме установки кода: короткое нажатие нужной клавиши - установить ее код, а долгое нажатие ЛЮБОЙ клавиши - стереть код.

При этом можно спокойно назначать любые и стирать коды с клавиш "ДжойВверх" / "ДжойВниз" / "Джойстик", управление клавишами, выбранными в самом начале запуска настройки клавиш, не сломается.

По рыжей кнопке "..." наверху слева открывается меню настройщика клавиш:

Меню настройщика клавиш, вызываемое по кнопке "..."

Меню настройщика клавиш, вызываемое по кнопке "..."

Состав меню:

  • "Авто-выбор кодов": автоматически определить модель телефона и после этого принять ее или выбрать самому другую модель/марку из готовых раскладок.

  • "Стереть код": паинткад выдаст совет как стирать код с конкретной клавиши (совет о том, что надо "долго удерживать клавишу")

  • "Стереть все коды": очистить все коды с клавиш, а потом вручную назначать каждый из них

  • "Назначать Vol+/-": эта кнопка видна только под андроидом, если включить эту функцию - то клавиши "Громкость+" и "Громкость-" будут перехватываться паинткадом и можно будет назначить на них какие-нибудь функции (обычно это "Тип линии" (сплошная/пунктир) и "Фото"). А если ее выключить - то клавиши "Громкость+" и "Громкость-" будут как обычно регулировать громкость (это для любителей слушать музыку и рисовать одновременно)

  • "Тест клавиш": покажется клавиатура, нажатие на клавишу будет отмечать нажатую. И можно проверить что все назначено верно. А потом закончить тест долгим нажатием на любую клавишу.

  • "Сохранить и выйти": сохранить в настройки назначенные коды и выйти из настройки клавиш

  • "Отменить и выйти": не сохранять никаких изменений и вернуть коды в то состояние, которое было до вызова настройки клавиш

Теперь с такой новой настройкой клавиш PaintCAD Mobile 3.0 может управляться с любых устройств с физическими клавишами.

Кстати, раньше раскладка кодов для определенной модели телефона выбиралась клавишами 1-8 в стартовом окне паинткада (где написано большими буквами "PaintCAD" и выбирается Русский/English язык). На клавише "8" - обычная Android-раскладка для цифровой кнопочной клавиатуры андроид. В PaintCAD Mobile 3.0 на клавишу 9 в этом окне добавлена еще одна раскладка "Android&Vol" - эта стандартная телефонная андроид-раскладка плюс включенный перехват клавиш "Громкость+" и "Громкость-" для вызова с помощью них "Тип линии" (сплошная/пунктир) и "Фото":

Новая раскладка "Android&Vol" по клавише "9" в стартовом окне - включает перехват клавиш громкости и ставит на них функции "Тип линий" и "Фото". Чтобы выключить перехват клавиш громкости - нажмите "8" и установите обычную "Android"-раскладку, без "&Vol".

Новая раскладка "Android&Vol" по клавише "9" в стартовом окне - включает перехват клавиш громкости и ставит на них функции "Тип линий" и "Фото". Чтобы выключить перехват клавиш громкости - нажмите "8" и установите обычную "Android"-раскладку, без "&Vol".

Проблемы с запуском паинткада для Android на некоторых новых смартфонах с заблокированной установкой "устаревших" приложений

Android-версия паинткада построена на обвязке Microemu, которая вытаскивает из Java-мидлета классы, добавляет к ним классы-прокладки, связывающие функции J2ME и Android, и собирает из этого всего APK файл через Android SDK.

APK-файл получается для старых версий Android. Где-то с Android 13 некоторые производители смартфонов года три назад (в 2022-2023, наверное) начали включать блокировку установки старых приложений.

Если андроид-версия при установке пишет что "Приложение устарело" и не устанавливается или выдает что-то типа "Error: INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 8":

Это значит что на вашем телефоне включена блокировка установки приложений, работающих на старых андроидах (некоторые производители смартфонов в последние годы стали встраивать подобные блокировки).

Обойти эту блокировку и установить приложение для старых телефонов можно, как пишут в гайдах, лишь одним путем - через утилиту adb (Android Debug Bridge) командой:

adb install --bypass-low-target-sdk-block путь_к_файлу.apk

(тогда нужен комп с установленным adb.exe и соединить телефон с компом по кабелю или по wifi с галочкой в настройках "Отладка по usb"/"Беспроводная отладка").

Кстати, например, мой Xiaomi Redmi Turbo 3 (Poco F6) имеет на борту достаточно современный Android 16, но устанавливает любые приложения без ограничений и блокировок. Значит, есть блокировка или нет - зависит от производителя смартфона. Т.е. физически классы старых андроидов из API на новых андроидах не вырезаны и все работает, если бы только не этот блок.

Попробовать PaintCAD Mobile 3.0.24

Полная версия:

APK для Android 2.3 и новее: http://blackstrip.ru/PaintCAD.apk

JAR/JAD для Java2ME MIDP2.0 с Java-памятью 2 Мбайт и более (а еще для J2ME Runner под андроидом может работать):

JAR: http://blackstrip.ru/PaintCAD.jar

JAD: http://blackstrip.ru/PaintCAD.jad

Урезанная Lowmem-версия для слабых устройств с маленьким внутренним диском и медленной работой (вырезана помощь, от этого размер APK/JAR снижен на 100 Кбайт, и запускается быстрее т.к. JAR быстрее распаковывается, функционал полностью такой же как у полной версии):

APK для Android 2.3 и новее: http://blackstrip.ru/pcmlm/PaintCAD.apk

JAR/JAD для Java2ME MIDP2.0:

JAR: http://blackstrip.ru/pcmlm/PaintCAD.jar

JAD: http://blackstrip.ru/pcmlm/PaintCAD.jad

p.s. в манифесте APK выставлено минимальное SDK для Android 2.2 - но это на всякий случай. На 2.1 устанавливаться точно не хочет. На 2.3 точно идет. А устройств с 2.2 для проверки у меня нет, вдруг там тоже пойдет =)