Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 02.06.2011, 23:11   #1
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Размытость

Как "сгладить" изображение (blur) средствами MP?.

UPD: В "Lib_effects" почему-то не работает.
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 03.06.2011, 10:32   #2
cherepets
Бывалый
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: Размытость

Можно помучаться выбирая цвета с картинки средствами мп и пары имеющихся либ. Можно написать свою либу.
(Offline)
 
Ответить с цитированием
Старый 03.06.2011, 10:55   #3
cherepets
Бывалый
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: Размытость

Косячная реализация бай ми.
function blue(color:integer):integer
begin 
color
:=color+16777216
blue:=color mod 256
end

function 
green(color:integer):integer
begin 
color
:=color+16777216
color:=color div 256;  
green:=color mod 256;  
end

function 
red(color:integer):integer
begin 
color
:=color+16777216
color:=color div 65536
red:=color mod 256;  
end

function 
blur(img:imagew,h:integer):image;
var 
scr:image;
begin
scr
:=imagefromcanvas(0,0,w,h);
for 
i:=0 to w-do
for 
j:=0 to h-do begin
    setcolor
((red(getcolor(im,i,j))*2+red(getcolor(im,i+1,j))+red(getcolor(im,i,j+1))+red(getcolor(im,i+1,j+1))) div 5,
    (
green(getcolor(im,i,j))*2+green(getcolor(im,i+1,j))+green(getcolor(im,i,j+1))+green(getcolor(im,i+1,j+1))) div 5,
    (
blue(getcolor(im,i,j))*2+blue(getcolor(im,i+1,j))+blue(getcolor(im,i,j+1))+blue(getcolor(im,i+1,j+1))) div 5);
    
plot(i,j);
end;
blur:=imagefromcanvas(0,0,20,20);
drawimage(scr,0,0);
end
Результат (разблюрен квадрат 20х20 слева):
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо cherepets за это полезное сообщение:
JACUK (03.06.2011), Trazzy (03.06.2011)
Старый 03.06.2011, 20:20   #4
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: Размытость

работает медленно на больших изображениях..
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 03.06.2011, 22:19   #5
_Nox_
ПроЭктировщик
 
Регистрация: 21.06.2009
Адрес: Беларусь, Столбцы
Сообщений: 148
Написано 32 полезных сообщений
(для 57 пользователей)
Ответ: Размытость

можно ускорить, только памяти мого использовать придётся
(Offline)
 
Ответить с цитированием
Старый 04.06.2011, 06:21   #6
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: Размытость

а либ больше никаких нет с blur'ом? (может я пропустил)
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 04.06.2011, 13:21   #7
cherepets
Бывалый
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: Размытость

В яве есть обращение к изображению как к массиву точек. Можешь переписать там мою функцию по нормальному и будет быстрее.
Но если ты хочешь в игре блюрить каждый кадр и это не шахматы - забей))
(Offline)
 
Ответить с цитированием
Старый 04.06.2011, 16:51   #8
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: Размытость

Сообщение от cherepets Посмотреть сообщение
В яве есть обращение к изображению как к массиву точек. Можешь переписать там мою функцию по нормальному и будет быстрее.
int ai[] = new int[image.getWidth() * image.getHeight()];
image.getRGB(ai, 0, image.getWidth(), 0, 0, image.getWidth(), image.getHeight());
типо этого?

Сообщение от cherepets Посмотреть сообщение
Но если ты хочешь в игре блюрить каждый кадр и это не шахматы - забей))
нет, нужно заблюрить одно изображение (задний фон).
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 04.06.2011, 17:05   #9
JACUK
Знающий
 
Регистрация: 09.10.2009
Сообщений: 340
Написано 37 полезных сообщений
(для 61 пользователей)
Ответ: Размытость

А не проще использовать готовое изображения?
__________________




(Offline)
 
Ответить с цитированием
Старый 05.06.2011, 06:59   #10
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: Размытость

нет не проще, т.к изображение подгружается из сети..
(из стороннего сайта)
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 26.06.2011, 17:10   #11
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Размытость

Хм, если нужно заблюрить картинку... можно сделать так:

Program blur;
Uses alpha;
var 
i:integer;
img:image;

begin
img
:=setOpaque(LoadImage ('/pic.png'),32);

for 
i:=1 to 20 do
begin
drawImage 
(img,random (8),random (8));
end;

img:=imagefromcanvas (0,0,GetImageWidth(img),GetImageHeight(img));

drawImage (img,0,0);
repaint;

repeat
delay 
(1);
Until (GetKeyPressed=KE_KEY0);

end
Результат до и после:
Нажмите на изображение для увеличения
Название: 01.png
Просмотров: 841
Размер:	9.8 Кб
ID:	14212Нажмите на изображение для увеличения
Название: 02.png
Просмотров: 889
Размер:	10.5 Кб
ID:	14213

Рекомендую побаловаться со счетчиком i, с величиной прозрачности и с величиной случайного разброса для достижения набольшего эффекта
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо PassCall за это полезное сообщение:
DIMMON4IK (16.07.2011), HolyDel (27.06.2011)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com