forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   canvas: аналог GetPixel или как ? (http://forum.boolean.name/showthread.php?t=8888)

Tronix 12.08.2009 23:37

canvas: аналог GetPixel или как ?
 
Всем привет.
Вообщем наигрался я с текстовыми мидлетами, захотелось попробовать что-нить порисовать :) Сейчас пишу простенькую прогу - хочу чтоб рисовала молнии. Для полного счастья хочу на уже созданном изображении в канве применить эффект Blur (размытие). Думаю делать примитивным способом - округление 8 близлежащих точек. Но сталкнулся с трудностью - а как получить пиксель (его цвет) из канвы по координатам x,y?

Смотрю в справку и вижу только Plot(x,y). А мне как-бы наоборот нужно... Еще есть некая ImageFromCanvas, которая возвращает тип image. Впринципе, то что нужно, но вот можно-ли как-то этот тип image обрабатывать, например как массив или еще как-то?

Глянул на список библиотек, но что-то похожей функции в них не нашел. Может конечно плохо глядел.. Помогите плиз советом новичку. Заранее спасибо :)

DIMMON4IK 13.08.2009 00:46

Чуть не по теме (извини), но есть либа lib_effects, там вроде есть размытие
http://www.forum.boolean.name/showthread.php?t=7749

Tronix 13.08.2009 14:57

Ответ: canvas: аналог GetPixel или как ?
 
Цитата:

Сообщение от DIMMON4IK (Сообщение 114067)
Чуть не по теме (извини), но есть либа lib_effects, там вроде есть размытие
http://www.forum.boolean.name/showthread.php?t=7749

Спасибо, посмотрел, но либо она не работает, либо я хз. Далал примерно так:
PHP код:

img := ImageFromCanvas(0,0,GetWidth,GetHeight);
img := effect(img,5); //Blur
DrawImage(img,0,0);
Repaint

Рисовала по-моему в итоге черный экран, даже если на экране перед этим что-то было. Но еще поэксперементирую...

А пока решил использовать массив ((( Ессно тормоза, каких свет не видывал. Ни о каком либо реал-тайм и речи нет (( Что-то все время переполняеться(?), подозреваю что косяки в процедуре отрисовки линии, отловить пока не могу. Переодически виснет намертво.
Еще сталкнулся с тем, что MP разрешает запросто делить число на ноль, из-за чего соответственно зависалово мидлета.

В архиве исходники и JAR.

ViNT 13.08.2009 15:02

Ответ: canvas: аналог GetPixel или как ?
 
На счет GetPixel: такой функции нет, но в библиотеке cnv2 есть функция get_rgb, которая создает массив значений пикселов в RGB из изображения.

Tronix 13.08.2009 15:59

Ответ: canvas: аналог GetPixel или как ?
 
Цитата:

Сообщение от ViNT (Сообщение 114111)
На счет GetPixel: такой функции нет, но в библиотеке cnv2 есть функция get_rgb, которая создает массив значений пикселов в RGB из изображения.

Интересно! А не подскажите, где данную либу взять? Поиск по форуму ссылки не дал.

ViNT 13.08.2009 16:06

Ответ: canvas: аналог GetPixel или как ?
 
Вложений: 1
Забыл, там даже есть функция
function get_color(x,y:integer):integer;
так что, можно сразу ее использовать.

Вот сама либа:

Tronix 13.08.2009 18:02

Ответ: canvas: аналог GetPixel или как ?
 
Вложений: 2
Мдя, функция хороша, но ругается что-то про совместимость типов, если сделать c := het_color(50,50), где c - integer. Хотя вроде если делать s := IntegerToString(get_color(50,50)), то вроде работает... Но тут опять-же вопросы скорости: пока она в строку переведеться, пока из строки перевести в шеснадцатерицную и выципить компоненты RGB, пока их поменять и потом опять-таки рисовать Plot по точке.... Вообщем как я понимаю на MP рендерить что-либо в реальном времени не получиться.

Все больше и больше посматриваю в сторону нативной Явы ;)

Ну и выложу на всякий случай исправленный исходник демки, там минусовые значения появлялись в SetColor и line_, отчего намертво висло все. Щаз исправил. Звездочка - смена картинки, решетка - выход.

Phantom 15.08.2009 05:16

Ответ: canvas: аналог GetPixel или как ?
 
О боже, зачем тебе переводить в строку, чтобы получить rgb составляющие? Юзай битовые сдвиги.

Tronix 15.08.2009 09:36

Ответ: canvas: аналог GetPixel или как ?
 
Цитата:

Сообщение от Phantom_wc (Сообщение 114418)
О боже, зачем тебе переводить в строку, чтобы получить rgb составляющие? Юзай битовые сдвиги.

А пофигу, все равно for x := 1 to Width do for y := 1 to Height do Plot(x,y) будет тормознуто. Вот если бы можно было сразу подготовить как-то image массив и его отрисовывать DrawImage, может быть что-то и получилось бы.
Но за идею со сдвигами спасиб конешно. Знал, но забыл (

ViNT 19.08.2009 23:59

Ответ: canvas: аналог GetPixel или как ?
 
Цитата:

Сообщение от Tronix (Сообщение 114425)
Вот если бы можно было сразу подготовить как-то image массив и его отрисовывать DrawImage, может быть что-то и получилось бы.

Вообще там есть функции, позволяющие получить массив из Image и Image из массива, или не это требуется?

Tronix 20.08.2009 11:23

Ответ: canvas: аналог GetPixel или как ?
 
Вложений: 1
Цитата:

Сообщение от ViNT (Сообщение 115358)
Вообще там есть функции, позволяющие получить массив из Image и Image из массива, или не это требуется?

Это и требуется, но была бы к ней еще коротенькая справочка какая-нибуть... Сейчас только смотрю в декомпилированный класс, но пока не очень понятны параметры. Буду разбираться....

А так еще немного оптимизировал демку, стала раза в два побыстрее работать. Исходники прилогаються.

cherepets 20.08.2009 14:27

Ответ: canvas: аналог GetPixel или как ?
 
Tronix, новая демка у меня не работает на телефоне (белый экран и зависание), на кэмуле тоже самое. sj boy справляется отлично...
А та которая 13.08.2009, 13:02 нормально работала.

abcdef 21.08.2009 10:39

Ответ: canvas: аналог GetPixel или как ?
 
Вложений: 1
оптимизировал демку Tronix'а

Tronix 21.08.2009 13:30

Ответ: canvas: аналог GetPixel или как ?
 
Цитата:

Сообщение от cherepets (Сообщение 115430)
Tronix, новая демка у меня не работает на телефоне (белый экран и зависание), на кэмуле тоже самое. sj boy справляется отлично...
А та которая 13.08.2009, 13:02 нормально работала.

Ну значит чего-то опять в минусовые значения уходит, отлавливать уже лениво. Вообще угнетает конечно в мидлетах от MP отсутствие какого-либо обработчика ошибок деления/переполнения/не верных значений. Сложно смотреть чего там и почему переполняеться или в минус уходит только лишь с помощью Debug(); Прикиньте - крутяться четыре цикла, в них еще циклы - и потом в логе на 16 метров еще надо понять почему какая-нить переменная в минуса ушла. Неудобно вообщем ящитаю.
Угнетает то, что в некоторых встроенных функциях опять-таки нет защиты от дурака, на подобии SetColor(-1,0,0). В этом случае мы получаем глухой зависон, а не какойнибуть сообщение типа Run-time error: invalid parameter или типа того.

За багрепорт спасибо. Ну тогда значит будем считать что работает на всех телефонах только первая демка из этой темы, а вторая - только на сименсах ;)

Tronix 21.08.2009 13:34

Ответ: canvas: аналог GetPixel или как ?
 
Цитата:

Сообщение от abcdef (Сообщение 115580)
оптимизировал демку Tronix'а

Да, спасибо, понял принципы. Юзал процедуры в основном для читабельности кода. Но что-то там с функцией рисования линии по-моему не так. Как-то она отрывисто получается. Ну да это не важно, я уже забил на эту демку.

Сейчас пробую огонь сделать. Разбираюсь с lib_cnv2 потихоньку.

PS: Спасибо всем за проявленный интерес к теме, всем поставил плюсы ;)
Тему пока попрошу не закрывать, чувствую будут еще вопросы у меня к вам, уважаемые гуру :)


Часовой пояс GMT +4, время: 13:51.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot