46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
|
|
1 | |
.NET 4.x Быстрая попиксельная замена нескольких цветов у картинки и остальная работа с графикой07.08.2020, 16:20. Показов 4241. Ответов 61
Метки нет (Все метки)
Здравствуйте.
Подскажите как быстро делать замену нескольких цветов у картинки + накладывание картинки на картинку или отрисовка в нужных позициях. И также маштабирование Для точности нужно использовать циклы по пиксельно или както по другому но нужно заменять только при полном совпадении. Но мне нужен быстрые способы. Стандартные методы делают это медленно. OpenGL да, но я вот тока не знаю как в нем работать. Там для меня трудная система коррдинат по Float системе. Да и плюс может есть чтото полегче Короче надеюсь есть те кто ответят. Уроки, примеры хоть что И так. Нужны 3 вещи. 1. Накладывание одной картинки на другую. 2. Отрисовка нескольких картинок в нужных позициях. Именно что не 1 картинка а несколько. 3. Замена массива цветов (Предположим 10 - 15 цветов) в картинки. Тоесть есть массив с исходными цветами а есть на которые нужно менять. 4. Изменение маштаба картинки / картинок Первые 2 по сути как 1 идет просто в 1 случае используеться 0 координата. И повторюсь. Интересуют быстрая реализация на уровне реализации игр но это не игра а утилита. Ну короче быстро это делать.
0
|
07.08.2020, 16:20 | |
Ответы с готовыми решениями:
61
Быстрая работа с графикой Попиксельная обработка картинки средствами VBA Есть н цветов разных видов. Составьте все возможные сочетания букетов из всех этих цветов. Количество цветов и их названия вводит пользователь Различие цветов однотонной картинки |
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
|
|
08.08.2020, 11:13 [ТС] | 2 |
Может кто ответит. Любая помощь. Профан в этом вопросе. SetPixel и GetPixel работают медленно. Есть и другие средства. Ну мне подсказывали. Пролблема в том что для большого размера картинок они тоже медленные. Размер картиноек большой примерно 800 x 600
0
|
264 / 183 / 87
Регистрация: 03.05.2020
Сообщений: 790
|
|
08.08.2020, 11:15 | 3 |
ну дайте картинку и что на что поменять
0
|
384 / 184 / 107
Регистрация: 07.01.2016
Сообщений: 496
|
|
08.08.2020, 11:22 | 4 |
0
|
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
|
|
08.08.2020, 11:25 [ТС] | 5 |
Картинку дать не могу. Да сойдет любая большая картинка где штук 15 - 20 цветов на другие цвета нужно поменять. Для очень высокой точности нужно попиксельно это делать. Хотя не знаю. Сам цикл на примере с картинкой 800 x 600 это получается 800 * 600 * 20 = 9600000.
0
|
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
|
|
08.08.2020, 11:27 | 6 |
1
|
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
|
|
08.08.2020, 11:35 [ТС] | 7 |
Ну на пример вот
https://www.codeproject.com/Ti... n-Csharp-3 Ну да. Быстрее чем SetPixel но это все равно медленно для большого размеера картинок. Добавлено через 4 минуты Не подходит. Net Framework 4.0 или ниже но никак не выше
0
|
384 / 184 / 107
Регистрация: 07.01.2016
Сообщений: 496
|
||||||
08.08.2020, 11:45 | 8 | |||||
есть простор для оптимизации. Попробуйте работать с цветом через структуру, которая соответствует хранению данных 32-битного цвета в памяти.
0
|
264 / 183 / 87
Регистрация: 03.05.2020
Сообщений: 790
|
|
08.08.2020, 11:45 | 9 |
Alexandr_7, нет так нет, с чем же тогда SetPixel и GetPixel сравнивать ...
0
|
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
|
|
08.08.2020, 11:58 | 10 |
Зачем себя старьем ограничивать? Я всегда использую только последние версии VS/C#/.NET и проблем не знаю...
0
|
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
|
|
08.08.2020, 12:12 [ТС] | 11 |
Ну если для примера то вот картинка:
https://yadi.sk/i/PjzRgG2MZINljA И список цветов на которые нужно заменить Код
#FFDA91 на #0048FF #DAB66D на #0048DA #B69148 на #0048B6 #916D24 на #004891 #6D4800 на #00246D #482424 на #002448 #240000 на #000024 А это мне кучу проблем доставит. Тоесть вручную прописывать каждый элекмент и настройка а элементов дофига. Я это сколько времени должен угробить.
0
|
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
|
|
08.08.2020, 12:30 | 12 |
Давно пора установить актуальную версию OS, а не сидеть на неподдерживаемом старье, отсюда и проблемы со всем чем только можно: актуальностью, совместимостью, безопасностью...
Вообще-то там .NET Standard 1.3 судя по описанию, который поддерживается в .NET Framework 4.6+ и других реализациях. https://github.com/SixLabors/I... csproj#L13 https://docs.microsoft.com/en-... on-support
0
|
08.08.2020, 12:43 | 13 |
Setpixel и getpixel - очень медленные методы. Используйте LockBits. Вы сможете работать с пикселями как с массивом байт
https://docs.microsoft.com/ru-... at-ext-3.1
0
|
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
|
|
08.08.2020, 13:01 [ТС] | 14 |
Да блин. А это что:
https://www.codeproject.com/Ti... n-Csharp-3 Это и есть LockBits но это тоже медленно. Картинка большая. Добавлено через 1 минуту В любом случае важно NET 4.0 и все.
0
|
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
|
|
08.08.2020, 13:01 | 15 |
Ну вот не знаете, а пишите... Поддерживается Windows: 7 SP1+, 8.1, Win10 Version 1607+, Nano Server Version 1803+, Server 2012 R2+, а так же Mac OS и Linux.
И тут мимо, конструктор давно есть.
0
|
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
|
|
08.08.2020, 13:13 [ТС] | 16 |
Из коробки в Visual Studio Net Core колнструктора нету. Его нужно подключать отдельно. Да и для меня удобнее Net Framework тем более я же сказал важно NET Framework 4.0. Еслиб только для скебя то юзал бы 4.7 так как в 10 он встроен но видители другим лень ставить NET Framework к томмуже много кто из теой аудитории до сихор на Windows xp сидят. Ей богу не надо пытаться меня переубедить. Вообщебы с радостью бы без NET Framework писал к примерору на Delphi да вот тока для этой утилиты 1 очень важный компонент написан на C# и переписывать на Delphi займет умй времени. Но вижу тут мне не дадут пример быстрой реализаци. Помимо замена цвета еще есть 3 оставшихся пункта.
1. Накладывание одной картинки на другую. 2. Отрисовка нескольких картинок в нужных позициях. Именно что не 1 картинка а несколько. 4. Изменение маштаба картинки / картинок Изменение маштаба тоже хз как реализовывать но в принципе с 4 пунктом это не основное. Основное это замена цветов. Повторяю пример: Картинка: https://yadi.sk/i/PjzRgG2MZINljA И цвета: #FFDA91 заменить на #0048FF #DAB66D заменить на #0048DA #B69148 заменить на #0048B6 #916D24 заменить на #004891 #6D4800 заменить на #00246D #482424 заменить на #002448 #240000 заменить на #000024
0
|
Пора на C++?
370 / 264 / 99
Регистрация: 10.04.2020
Сообщений: 1,275
|
|
08.08.2020, 13:29 | 17 |
Alexandr_7, пишите на Сях Плюс Плюсовских и импортируйте через DllImport.
0
|
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
|
|
08.08.2020, 13:43 [ТС] | 18 |
Я же сказал у меня для утилиты компоненты написаны на C# так что нет. Не вариант.
Может есть альтернативные пути быстрой обработки графике на NET 4.0. Или грапфический движок обертка над OpenGL но совместимой с WinForms. Знаю про ShareGL но как уже сказал инфы по замене цветов у картинки нет да и вообще если речь заходит про OpenGL то как работать с 2 d в ней там вообще инфы нет плюс это неудобная система координат. Добавлено через 7 минут Хотя может кто пример даст по замене цветов через LockBits. Может и ошибаюсь но мне казалась задержка в 2 секунды была. Повторюсь что да. Быстрее чем Setpixel и getpixel но задержка в 2 секунды это уже много. На уровни игр надо обработку делать.
0
|
Пора на C++?
370 / 264 / 99
Регистрация: 10.04.2020
Сообщений: 1,275
|
|
08.08.2020, 13:47 | 19 |
Alexandr_7, я же не говорю вам про написание всего кода на плюсах. Вы можете написать дллку с несколькими функциями на плюсах и импортировать эти функции в ваш шарповский код.
0
|
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
|
|
08.08.2020, 13:49 | 20 |
Есть там всё...
Забейте на других. Если им нужен ваш софт, то обновятся и установят всё что нужно, никуда не денутся... Ну и вообще ускорить проход по массиву пикселей можно например распараллелив обработку на несколько потоков. Чем DrawImage не устраивает? Позициях чего? Но тоже думаю DrawImage... Под масштабом имеется в виду размер чтоли? Или нужно просто уместить картинку куда-то?
0
|
08.08.2020, 13:49 | |
08.08.2020, 13:49 | |
Помогаю со студенческими работами здесь
20
Уменьшить количество цветов картинки! Обрезка списка цветов из картинки Замена цветов в картинке Замена цветов на картинке Замена цветов избражения удалить один из цветов (пикселей) с картинки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |