|
А как вычислить "средний цвет картинки"?
|
|||
---|---|---|---|
#18+
Есть форма, на нее кладем картинку (произвольную). Надо к картинке нарисовать "шапку" -типа заголовок формы. При этом шапка должна попасть "в тон" картинке - лучше если верхней части, и при этом быть темной (т.е. на ней расположен белый шрифт и белый крест - кнопка закрыть). Вариант #1: Код: vbnet 1.
Вариант #2 Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Ну или например то же что выше - среднее от верхней полосы заданной ширины - высоты. Задница в чем, если верхний правый пиксель темный и тон верхней части картинки более менее одинаковый, то хватит этого пикселя. Т.е. цвет шапки должен быть "темным". Если сверху белое-бледное, то цвет надо брать пониже (наверное). Здесь скорее не код нужен, а идея как придумать такой подходящий цвет из произвольной картинки (алгоритм?). Есть какая-нибудь теория по этому делу? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 05:05 |
|
А как вычислить "средний цвет картинки"?
|
|||
---|---|---|---|
#18+
Дмитрий77Есть какая-нибудь теория по этому делу? конечно. Уйти нужно от цветовой модели RGB например HSB - цветовой тон (hue), насыщенность (saturation), яркость (brightness). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 05:52 |
|
А как вычислить "средний цвет картинки"?
|
|||
---|---|---|---|
#18+
Дмитрий77For x For y GetPixel(0, 0) за это можно покалечить. это работает очень долго. быстрее перегнать в массив байт, в BMP формат и с ним играться. как это будет на VB не знаю. схема какая то такая: картинка->стрим->массив байт правда , если скорость не жмёт... по теме. присвоить вес пикселям. те что ближе к краю те имеют больший вес. +использовать градиент ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 06:29 |
|
А как вычислить "средний цвет картинки"?
|
|||
---|---|---|---|
#18+
beg-in-erДмитрий77For x For y GetPixel(0, 0) за это можно покалечить. это работает очень долго. быстрее перегнать в массив байт, в BMP формат и с ним играться. как это будет на VB не знаю. схема какая то такая: картинка->стрим->массив байт правда , если скорость не жмёт... по теме. присвоить вес пикселям. те что ближе к краю те имеют больший вес. +использовать градиент На самом деле у меня Код: vbnet 1.
и при необходимости Код: vbnet 1. 2.
и сделать это на VB6, но Net.Graphics == Gdi+ Graphics, но т.к. я запостил на .Net то и пример кода на .Net По поводу скорости - ерунда. Картинка ~400х400 px, делается один раз при загрузке картинки, либо вообще при выборе картинки и цвет запоминается независимо. Даже for x,y для всей картинки делается очень быстро. Градиентов не нужно, нужен один цвет. ИзопропилДмитрий77Есть какая-нибудь теория по этому делу? конечно. Уйти нужно от цветовой модели RGB например HSB - цветовой тон (hue), насыщенность (saturation), яркость (brightness). Да надо как-то по-простому сделать, чем RGB не катит? В твоем случае нужны примеры реализации, RGB хотя б понятно как вытаскивать. Я попробую пояснить на картинке. В "хорошем случае" -достаточно левого верхнего пикселя, в "плохом" - взято среднее по верхней скан-линии (а по хорошему надо б взять преобладающий цвет элементов темного поезда). Под "шапкой" будет полоса белой подложки -наложенная белая полупрозрачная картинка (примерно воспроизвел), поэтому "сливание" шапки с верхним фоном не страшно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 17:09 |
|
А как вычислить "средний цвет картинки"?
|
|||
---|---|---|---|
#18+
Дмитрий77Да надо как-то по-простому сделать, чем RGB не катит? HSV - это и есть по-простому. Почитай теорию и практику о цветовых пространствах, формулы перевода - простые. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 17:13 |
|
А как вычислить "средний цвет картинки"?
|
|||
---|---|---|---|
#18+
Тут обсуждали: http://bbs.vbstreets.ru/viewtopic.php?f=73&t=43831 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 17:55 |
|
А как вычислить "средний цвет картинки"?
|
|||
---|---|---|---|
#18+
Antonariy, как ты наверно понял, я пытаюсь допилить твою идею, кстати письмо то крайнее получил (просто не отвечаешь)? Да как то проще надо, а то там звезды какие-то. М.б. как-то "убрать белый" (Как?) А потом вычислить "средний цвет" (без белого)? Плохо то что я не могу (алгоритмом) сформулировать то чего хочу (для произвольной картинки). Т.е. цвет шапки должен быть не "кукареку" относит. картинки и при этом не сливаться с белым. Желательно чтоб он "сливался" с верхней левой частью картинки. Но при этом и не быть случайным. Приоритеты: 1) Верхняя левая часть (не "белый") - но при условии что это не случайный пиксель (например железнодорожный столб), а соответствует примерно соседним - темное небо хороший пример. 2) Верхняя часть (не "белый") 3) Преобладающий цвет (с какой-то точностью) (не "белый") Для картинки с поездом первые 2 варианта не прокатывают, доминирующий цвет - темные окна поезда (на мой взгляд). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 19:05 |
|
А как вычислить "средний цвет картинки"?
|
|||
---|---|---|---|
#18+
Ну в принципе вот такая "фигня" дает неплохие результаты. Я ограничил выбор цветов "не слишком светлый" -"не слишком темный" (скажу честно - от балды) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 22:31 |
|
|
start [/forum/topic.php?desktop=1&fid=20&tid=1403957]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 321ms |
total: | 468ms |
0 / 0 |