|
Основной форум Сюда все проблемы связанные с программированием. |
12.08.2009, 23:37
|
#1
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
canvas: аналог GetPixel или как ?
Всем привет.
Вообщем наигрался я с текстовыми мидлетами, захотелось попробовать что-нить порисовать Сейчас пишу простенькую прогу - хочу чтоб рисовала молнии. Для полного счастья хочу на уже созданном изображении в канве применить эффект Blur (размытие). Думаю делать примитивным способом - округление 8 близлежащих точек. Но сталкнулся с трудностью - а как получить пиксель (его цвет) из канвы по координатам x,y?
Смотрю в справку и вижу только Plot(x,y). А мне как-бы наоборот нужно... Еще есть некая ImageFromCanvas, которая возвращает тип image. Впринципе, то что нужно, но вот можно-ли как-то этот тип image обрабатывать, например как массив или еще как-то?
Глянул на список библиотек, но что-то похожей функции в них не нашел. Может конечно плохо глядел.. Помогите плиз советом новичку. Заранее спасибо
|
(Offline)
|
|
13.08.2009, 00:46
|
#2
|
Знающий
Регистрация: 21.07.2009
Адрес: Украина
Сообщений: 219
Написано 44 полезных сообщений (для 78 пользователей)
|
Чуть не по теме (извини), но есть либа lib_effects, там вроде есть размытие
http://www.forum.boolean.name/showthread.php?t=7749
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.08.2009, 14:57
|
#3
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
Сообщение от DIMMON4IK
|
Спасибо, посмотрел, но либо она не работает, либо я хз. Далал примерно так:
img := ImageFromCanvas(0,0,GetWidth,GetHeight); img := effect(img,5); //Blur DrawImage(img,0,0); Repaint;
Рисовала по-моему в итоге черный экран, даже если на экране перед этим что-то было. Но еще поэксперементирую...
А пока решил использовать массив ((( Ессно тормоза, каких свет не видывал. Ни о каком либо реал-тайм и речи нет (( Что-то все время переполняеться(?), подозреваю что косяки в процедуре отрисовки линии, отловить пока не могу. Переодически виснет намертво.
Еще сталкнулся с тем, что MP разрешает запросто делить число на ноль, из-за чего соответственно зависалово мидлета.
В архиве исходники и JAR.
Последний раз редактировалось Tronix, 13.08.2009 в 21:00.
|
(Offline)
|
|
13.08.2009, 15:02
|
#4
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
На счет GetPixel: такой функции нет, но в библиотеке cnv2 есть функция get_rgb, которая создает массив значений пикселов в RGB из изображения.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.08.2009, 15:59
|
#5
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
Сообщение от ViNT
На счет GetPixel: такой функции нет, но в библиотеке cnv2 есть функция get_rgb, которая создает массив значений пикселов в RGB из изображения.
|
Интересно! А не подскажите, где данную либу взять? Поиск по форуму ссылки не дал.
|
(Offline)
|
|
13.08.2009, 16:06
|
#6
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
Забыл, там даже есть функция
function get_color(x,y:integer):integer;
так что, можно сразу ее использовать.
Вот сама либа:
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.08.2009, 18:02
|
#7
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
Мдя, функция хороша, но ругается что-то про совместимость типов, если сделать c := het_color(50,50), где c - integer. Хотя вроде если делать s := IntegerToString(get_color(50,50)), то вроде работает... Но тут опять-же вопросы скорости: пока она в строку переведеться, пока из строки перевести в шеснадцатерицную и выципить компоненты RGB, пока их поменять и потом опять-таки рисовать Plot по точке.... Вообщем как я понимаю на MP рендерить что-либо в реальном времени не получиться.
Все больше и больше посматриваю в сторону нативной Явы
Ну и выложу на всякий случай исправленный исходник демки, там минусовые значения появлялись в SetColor и line_, отчего намертво висло все. Щаз исправил. Звездочка - смена картинки, решетка - выход.
|
(Offline)
|
|
15.08.2009, 05:16
|
#8
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
О боже, зачем тебе переводить в строку, чтобы получить rgb составляющие? Юзай битовые сдвиги.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Phantom за это полезное сообщение:
|
|
15.08.2009, 09:36
|
#9
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
Сообщение от Phantom_wc
О боже, зачем тебе переводить в строку, чтобы получить rgb составляющие? Юзай битовые сдвиги.
|
А пофигу, все равно for x := 1 to Width do for y := 1 to Height do Plot(x,y) будет тормознуто. Вот если бы можно было сразу подготовить как-то image массив и его отрисовывать DrawImage, может быть что-то и получилось бы.
Но за идею со сдвигами спасиб конешно. Знал, но забыл (
|
(Offline)
|
|
19.08.2009, 23:59
|
#10
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
Сообщение от Tronix
Вот если бы можно было сразу подготовить как-то image массив и его отрисовывать DrawImage, может быть что-то и получилось бы.
|
Вообще там есть функции, позволяющие получить массив из Image и Image из массива, или не это требуется?
|
(Offline)
|
|
20.08.2009, 11:23
|
#11
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
Сообщение от ViNT
Вообще там есть функции, позволяющие получить массив из Image и Image из массива, или не это требуется?
|
Это и требуется, но была бы к ней еще коротенькая справочка какая-нибуть... Сейчас только смотрю в декомпилированный класс, но пока не очень понятны параметры. Буду разбираться....
А так еще немного оптимизировал демку, стала раза в два побыстрее работать. Исходники прилогаються.
|
(Offline)
|
|
20.08.2009, 14:27
|
#12
|
Бывалый
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений (для 215 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
Tronix, новая демка у меня не работает на телефоне (белый экран и зависание), на кэмуле тоже самое. sj boy справляется отлично...
А та которая 13.08.2009, 13:02 нормально работала.
Последний раз редактировалось cherepets, 20.08.2009 в 22:03.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.08.2009, 10:39
|
#13
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
оптимизировал демку Tronix'а
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.08.2009, 13:30
|
#14
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
Сообщение от cherepets
Tronix, новая демка у меня не работает на телефоне (белый экран и зависание), на кэмуле тоже самое. sj boy справляется отлично...
А та которая 13.08.2009, 13:02 нормально работала.
|
Ну значит чего-то опять в минусовые значения уходит, отлавливать уже лениво. Вообще угнетает конечно в мидлетах от MP отсутствие какого-либо обработчика ошибок деления/переполнения/не верных значений. Сложно смотреть чего там и почему переполняеться или в минус уходит только лишь с помощью Debug(); Прикиньте - крутяться четыре цикла, в них еще циклы - и потом в логе на 16 метров еще надо понять почему какая-нить переменная в минуса ушла. Неудобно вообщем ящитаю.
Угнетает то, что в некоторых встроенных функциях опять-таки нет защиты от дурака, на подобии SetColor(-1,0,0). В этом случае мы получаем глухой зависон, а не какойнибуть сообщение типа Run-time error: invalid parameter или типа того.
За багрепорт спасибо. Ну тогда значит будем считать что работает на всех телефонах только первая демка из этой темы, а вторая - только на сименсах
|
(Offline)
|
|
21.08.2009, 13:34
|
#15
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: canvas: аналог GetPixel или как ?
Сообщение от abcdef
оптимизировал демку Tronix'а
|
Да, спасибо, понял принципы. Юзал процедуры в основном для читабельности кода. Но что-то там с функцией рисования линии по-моему не так. Как-то она отрывисто получается. Ну да это не важно, я уже забил на эту демку.
Сейчас пробую огонь сделать. Разбираюсь с lib_cnv2 потихоньку.
PS: Спасибо всем за проявленный интерес к теме, всем поставил плюсы
Тему пока попрошу не закрывать, чувствую будут еще вопросы у меня к вам, уважаемые гуру
Последний раз редактировалось Tronix, 21.08.2009 в 13:52.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:05.
|