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

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

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > 2D-программирование

Ответ
 
Опции темы
Старый 29.06.2010, 14:17   #1
teremochek
Нуждающийся
 
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений
(для 29 пользователей)
Обезцветить спрайт

Скажите, можно-ли каким-нибуть образом обезцветить спрайт?
(Offline)
 
Ответить с цитированием
Старый 29.06.2010, 14:56   #2
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Обезцветить спрайт

Можно пройтись по пиксмапе грейскейлом.

Local Pixmap:TPixmap LockImage(Image
For 
Local Y% = 0 Until Pixmap.Height
        
For Local X% = 0 Until Pixmap.width
                Local ARGB
% = ReadPixel(PixmapX%, Y%) 
                
Local R% = (ARGB & $00FF0000Shr 16 ' красный
                Local G% = (ARGB & $0000FF00) Shr 8 ' 
зеленый
                Local B
% = (ARGB & $000000FF)         ' синий компонент

                Local i# = 0.2126 * R + 0.7152 * G + 0.0722 * B
                R = i
                G = i 
                B = i 

                WritePixel Pixmap, X, Y, $FF000000 + R Shl 16 + G Shl 8 + B
        Next
Next 
Вроде так.
Image - твоё изображение.
Операцию проводить единожды (не в цикле)
У изображения должен быть флаг DYNAMICIMAGE
Например: LoadImage("Image.bmp", DYNAMICIMAGE)

Писал в браузере - мод допустить ляпы
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
is.SarCasm (29.06.2010), teremochek (29.06.2010)
Старый 29.06.2010, 16:36   #3
teremochek
Нуждающийся
 
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений
(для 29 пользователей)
Ответ: Обезцветить спрайт

Сообщение от Randomize Посмотреть сообщение
Можно пройтись по пиксмапе грейскейлом.

Image - твоё изображение.
Операцию проводить единожды (не в цикле)
У изображения должен быть флаг DYNAMICIMAGE
Например: LoadImage("Image.bmp", DYNAMICIMAGE)
Спасибо! Работает даже без DYNAMICIMAGE.
А Как проделать тоже тожесамое с LoadAnimimage? А то у меня обезцвечивает только один frame.
(Offline)
 
Ответить с цитированием
Старый 29.06.2010, 16:54   #4
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Обезцветить спрайт

Ну смотри.
AnimImage - это тоже самое что обычное изображение только с большим количеством Pixmap`ов.
Смотрим в справку:
Function LockImage:TPixmap( image:TImage,frame=0,read_lock=True,write_lock=True )
Description: Lock an image for direct access
Returns: A pixmap representing the image contents
Information: Locking an image allows you to directly access an image's pixels.
Only images created with the DYNAMICIMAGE flag can be locked.
Locked images must eventually be unlocked with UnlockImage before they can be drawn.
Второй параметр ф-ции LockImage отвечает за фрейм (кадр)
Значит нам нужно циклически проделать данную операцию с каждым кадром изображения.
For Local frm%=0 To CountFrames 1
     Local Pixmap
:TPixmap LockImage(Imagefrm)  
     For 
Local Y% = 0 Until Pixmap.Height 
             
For Local X% = 0 Until Pixmap.width 
                     Local ARGB
% = ReadPixel(PixmapX%, Y%)  
                     
Local R% = (ARGB & $00FF0000Shr 16 ' красный 
                     Local G% = (ARGB & $0000FF00) Shr 8 ' 
зеленый 
                     Local B
% = (ARGB & $000000FF)         ' синий компонент 

                     Local i# = 0.2126 * R + 0.7152 * G + 0.0722 * B 
                     R = i 
                     G = i  
                     B = i  
     
                     WritePixel Pixmap, X, Y, $FF000000 + R Shl 16 + G Shl 8 + B 
             Next
     Next
Next 
CountFrames - количество кадров изображения.
Вроде был универсальный способ узнать количество.
Чтото вроде: Image.Framse.Count или Image.Frames.Length
Поэксперементируй.
А лучше возьми Blide.
Он всегда подскажет.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
teremochek (29.06.2010)
Старый 29.06.2010, 17:43   #5
teremochek
Нуждающийся
 
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений
(для 29 пользователей)
Ответ: Обезцветить спрайт

Интересно, а можно обезцветить конкретный пиксель на экране?
И вообще можно-ли узнать цвет пикселя на экране?
(Offline)
 
Ответить с цитированием
Старый 29.06.2010, 18:04   #6
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Обезцветить спрайт

Прошу ознакомится:
http://blitzetc.blitzmax.ru/index.ph...к ие_колобки»

http://blitzetc.blitzmax.ru/index.ph...художник:_цвет

http://blitzetc.blitzmax.ru/index.ph...ие_на_BlitzMax
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
teremochek (29.06.2010)
Старый 29.06.2010, 18:52   #7
teremochek
Нуждающийся
 
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений
(для 29 пользователей)
Ответ: Обезцветить спрайт

Спасибо, понравилось.
(Offline)
 
Ответить с цитированием
Старый 30.06.2010, 01:25   #8
Черный крыс
 
Сообщений: n/a
Ответ: Обезцветить спрайт

Все что написано выше можно проделать одной строкой ... показую

image.pixmaps[frame] = image.pixmaps[frame].Convert(PF_I8)
параметр frame отвечает за то - какой кадр в аним имедже хотим обесцветить. если имедж не анимированный то ставим нулики.
юзайте =)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
Arton (30.06.2010), SBJoker (30.06.2010)
Старый 30.06.2010, 16:34   #9
teremochek
Нуждающийся
 
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений
(для 29 пользователей)
Ответ: Обезцветить спрайт

Сообщение от Diablo1909 Посмотреть сообщение
image.pixmaps[frame] = image.pixmaps[frame].Convert(PF_I8)
У меня пишет "Identifier 'pixmaps' not found"
Подскажите как правильно написать ?
(Offline)
 
Ответить с цитированием
Старый 30.06.2010, 16:36   #10
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Обезцветить спрайт

Сообщение от teremochek Посмотреть сообщение
У меня пишет "Identifier 'pixmaps' not found"
Подскажите как правильно написать ?
frame поменяй на 0.
Или циклом прйдись по всем кадрам в случае с анимацией.
(Offline)
 
Ответить с цитированием
Старый 05.07.2010, 00:33   #11
teremochek
Нуждающийся
 
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений
(для 29 пользователей)
Ответ: Обезцветить спрайт

Сообщение от Randomize Посмотреть сообщение
frame поменяй на 0.
Или циклом прйдись по всем кадрам в случае с анимацией.
Поменял frame на 0, все равно пишет ту же ошибку.
(Offline)
 
Ответить с цитированием
Старый 05.07.2010, 21:34   #12
Черный крыс
 
Сообщений: n/a
Ответ: Обезцветить спрайт

Graphics 1024,768
 
Local image:TImage = LoadImage("scene3.jpg")
 
image.pixmaps[0] = image.pixmaps[0].Convert(PF_I8)
 
While Not KeyHit(KEY_ESCAPE)
 
    Cls
    DrawImage(image,MouseX(),MouseY(),0)
    Flip(True)
Wend
image = Null
EndGraphics()
GCCollect()
End
Что тут сложного?
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
teremochek (06.07.2010)
Старый 06.07.2010, 00:58   #13
teremochek
Нуждающийся
 
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений
(для 29 пользователей)
Ответ: Обезцветить спрайт

Что тут сложного?
Мне нужно было добавить :TImage(а я их как правило непишу)
Теперь все работает.Спасибо.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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