|
29.06.2010, 14:17
|
#1
|
Нуждающийся
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений (для 29 пользователей)
|
Обезцветить спрайт
Скажите, можно-ли каким-нибуть образом обезцветить спрайт?
|
(Offline)
|
|
29.06.2010, 14:56
|
#2
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Обезцветить спрайт
Можно пройтись по пиксмапе грейскейлом.
Local Pixmap:TPixmap = LockImage(Image) For Local Y% = 0 Until Pixmap.Height For Local X% = 0 Until Pixmap.width Local ARGB% = ReadPixel(Pixmap, X%, Y%) Local R% = (ARGB & $00FF0000) Shr 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 4090 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 за это полезное сообщение:
|
|
29.06.2010, 16:36
|
#3
|
Нуждающийся
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений (для 29 пользователей)
|
Ответ: Обезцветить спрайт
Сообщение от Randomize
Можно пройтись по пиксмапе грейскейлом.
Image - твоё изображение.
Операцию проводить единожды (не в цикле)
У изображения должен быть флаг DYNAMICIMAGE
Например: LoadImage("Image.bmp", DYNAMICIMAGE)
|
Спасибо! Работает даже без DYNAMICIMAGE.
А Как проделать тоже тожесамое с LoadAnimimage? А то у меня обезцвечивает только один frame.
|
(Offline)
|
|
29.06.2010, 16:54
|
#4
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Обезцветить спрайт
Ну смотри.
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(Image, frm) For Local Y% = 0 Until Pixmap.Height For Local X% = 0 Until Pixmap.width Local ARGB% = ReadPixel(Pixmap, X%, Y%) Local R% = (ARGB & $00FF0000) Shr 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 4090 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
29.06.2010, 17:43
|
#5
|
Нуждающийся
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений (для 29 пользователей)
|
Ответ: Обезцветить спрайт
Интересно, а можно обезцветить конкретный пиксель на экране?
И вообще можно-ли узнать цвет пикселя на экране?
|
(Offline)
|
|
29.06.2010, 18:04
|
#6
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Обезцветить спрайт
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
29.06.2010, 18:52
|
#7
|
Нуждающийся
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений (для 29 пользователей)
|
Ответ: Обезцветить спрайт
Спасибо, понравилось.
|
(Offline)
|
|
30.06.2010, 01:25
|
#8
|
|
Ответ: Обезцветить спрайт
Все что написано выше можно проделать одной строкой ... показую
image.pixmaps[frame] = image.pixmaps[frame].Convert(PF_I8)
параметр frame отвечает за то - какой кадр в аним имедже хотим обесцветить. если имедж не анимированный то ставим нулики.
юзайте =)
|
|
|
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
|
|
30.06.2010, 16:34
|
#9
|
Нуждающийся
Регистрация: 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
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Обезцветить спрайт
Сообщение от teremochek
У меня пишет "Identifier 'pixmaps' not found"
Подскажите как правильно написать ?
|
frame поменяй на 0.
Или циклом прйдись по всем кадрам в случае с анимацией.
|
(Offline)
|
|
05.07.2010, 00:33
|
#11
|
Нуждающийся
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений (для 29 пользователей)
|
Ответ: Обезцветить спрайт
Сообщение от Randomize
frame поменяй на 0.
Или циклом прйдись по всем кадрам в случае с анимацией.
|
Поменял frame на 0, все равно пишет ту же ошибку.
|
(Offline)
|
|
05.07.2010, 21:34
|
#12
|
|
Ответ: Обезцветить спрайт
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
Что тут сложного?
|
|
|
Сообщение было полезно следующим пользователям:
|
|
06.07.2010, 00:58
|
#13
|
Нуждающийся
Регистрация: 11.01.2009
Сообщений: 56
Написано 10 полезных сообщений (для 29 пользователей)
|
Ответ: Обезцветить спрайт
Мне нужно было добавить :TImage(а я их как правило непишу)
Теперь все работает.Спасибо.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:49.
|