Приветствую.
Кто нибудь выводил раздербаненный до отдельных картинок gif?
Анимация на KS0108
Сообщений 1 страница 19 из 19
Поделиться12017-08-16 20:10:54
Поделиться32017-08-17 14:38:15
Это немного совсем не то.
В ссылке говорится о текстовых ЖКИ, я же спрашивал о графических.
И, кстати, при открытии ссылки с мобильного происходит перенаправление на скрипт с платной подпиской.
Отредактировано rustr (2017-08-17 14:41:44)
Поделиться42017-08-17 14:40:21
Точно, не доглядел.
Поделиться52017-08-17 14:53:41
Что нужно? Разобрать gif средствами МК или выводить предварительно разобранную картинку? Где картинка будет хранится?
Поделиться62017-08-17 17:01:30
Может быть, это подходит http://avrproject.ru/publ/vyvod_animiro … /1-1-0-97?
Поделиться72017-08-17 18:40:44
Пётр Нужно любое решение, которое позволит вывести простенькую анимацию. Есть и гифка, и она же, разобранная на 50 кадров.
forter это я видел, но не могу сообразить, как размер картинок, отличных от 88*88 (у него они заточены под экранчик Нокии, и программка тоже под нее вывод делает.
Поделиться82017-08-19 09:47:00
А как перевести формат BGF в BAS или в HEX?
Поделиться102017-08-19 13:49:25
О. Буду очень благодарен.
Поделиться112017-08-19 15:51:25
Готово.
Первая проблема была в том, что черный - это не черный, даёт шумы при преобразовании. Это я поправил.
Вторая проблема - это в момент превращения в девушку, цвет/рисунок блекнет. Это такой гиф, как есть, рисовать руками кучу кадров не буду.) Т.ч. сами правьте.
В общем графика дело наживное, главное научитесь выводить на экран.
Характеристики спрайтов/кадров: 114х64, битовое (1 или 0). Т.е. один кадр занимает 960 байт. Общий объём не кислый: 48000 байта, не уверен, что влезет в МК вместе с кодом.)
Отредактировано RDW (2022-02-23 10:59:03)
Поделиться122017-08-19 15:54:40
Пример подключения файла к баскому:
$inc Anim , Nosize , "marvel.frm"
Чтение:
A = Lookup(tmp , Anim)
Где "tmp" - адрес данных в файле.
А - полученные данные.
Поделиться132017-08-19 16:33:20
Спасибо, буду смотреть. А чем теперь править цвета? Или это делается до момента преобразования?
И в чем готовится этот .frm?
Поделиться142017-08-19 20:15:38
Цвета надо править в исходнике (гифке, если есть возможность) или можно разложить опять на кадры, но чтобы качество не терялось, то не в JPG, а в BMP хотя бы.
frm - это я так обозвал, вообще это давняя технология с времен ZX Spectrum, когда берется любая растровая картинка с тру цветами и преобразуется в однобитный вид при помощи утилиты консольной "Алхимия", перегоняется в простой формат FOP, он без всяких жатий (как есть) и потом ЭТО всё клеится в один файл обычным файловым менеджером.
Поделиться152017-08-19 23:15:45
Разбор гифки на кадры.
Экспорт GIF в BMP.
UseGIFImageDecoder()
SourceImage.s = "Waves.gif"
ResultDir.s = "Out\"
If LoadImage(0, SourceImage)
If FileSize(ResultDir)<>-2 And CreateDirectory(ResultDir) = 0
MessageRequester("", "Не удалось создать папку")
Goto exit
EndIf
CountImg = ImageFrameCount(0)-1 ; Число кадров в гифке.
For i=0 To CountImg
SetImageFrame(0, i) ; Выбор кадра в гифке.
res = SaveImage(0, ResultDir + i +".bmp")
Debug "Кадр "+i+" "+res
Next i
MessageRequester("", "Картинки сохранены")
Else
MessageRequester("", "Не удалось загрузить картинку")
EndIf
exit:
EndТоже самое но в PNG (занимает меньше места на диске).
UseGIFImageDecoder()
UsePNGImageEncoder()
SourceImage.s = "Waves.gif"
ResultDir.s = "Out\"
If LoadImage(0, SourceImage)
If FileSize(ResultDir)<>-2 And CreateDirectory(ResultDir) = 0
MessageRequester("", "Не удалось создать папку")
Goto exit
EndIf
CountImg = ImageFrameCount(0)-1 ; Число кадров в гифке.
For i=0 To CountImg
SetImageFrame(0, i) ; Выбор кадра в гифке.
res = SaveImage(0, ResultDir + i +".png", #PB_ImagePlugin_PNG)
Debug "Кадр "+i+" "+res
Next i
MessageRequester("", "Картинки сохранены")
Else
MessageRequester("", "Не удалось загрузить картинку")
EndIf
exit:
EndТоже самое, но с изменением размера картинки под индикатор (128x64).
UseGIFImageDecoder()
UsePNGImageEncoder()
SourceImage.s = "Waves.gif"
ResultDir.s = "Out\"
If LoadImage(0, SourceImage)
If FileSize(ResultDir)<>-2 And CreateDirectory(ResultDir) = 0
MessageRequester("", "Не удалось создать папку")
Goto exit
EndIf
CountImg = ImageFrameCount(0)-1 ; Число кадров в гифке.
For i=0 To CountImg
SetImageFrame(0, i) ; Выбор кадра в гифке.
CopyImage(0, 1)
ResizeImage(1, 128, 64)
res = SaveImage(1, ResultDir + i +".png", #PB_ImagePlugin_PNG)
Debug "Кадр "+i+" "+res
FreeImage(1)
Next i
MessageRequester("", "Картинки сохранены")
Else
MessageRequester("", "Не удалось загрузить картинку")
EndIf
exit:
EndПри необходимости, можно произвести обработку перед сохранением на диск, например заменить некоторые цвета и т. д.
Поделиться162017-08-20 10:11:56
Это для PureBasic ?
Поделиться182017-08-20 17:25:50
Преобразование картинки в черно-белую.
UseGIFImageDecoder()
UsePNGImageEncoder()
Declare GreyImage(Image)
SourceImage.s = "Waves.gif"
ResultDir.s = "Out\"
If LoadImage(0, SourceImage)
If FileSize(ResultDir)<>-2 And CreateDirectory(ResultDir) = 0
MessageRequester("", "Не удалось создать папку")
Goto exit
EndIf
CountImg = ImageFrameCount(0)-1 ; Число кадров в гифке.
For i=0 To CountImg
SetImageFrame(0, i) ; Выбор кадра в гифке.
CopyImage(0, 1)
ResizeImage(1, 128, 64)
GreyImage(1) ; Преобразование цветной картинки в черно-белую
res = SaveImage(1, ResultDir + i +".png", #PB_ImagePlugin_PNG)
Debug "Кадр "+i+" "+res
FreeImage(1)
Next i
MessageRequester("", "Картинки сохранены")
Else
MessageRequester("", "Не удалось загрузить картинку")
EndIf
exit:
End
#redlight=30 : #greenlight=53 : #bluelight=11
#total = #redlight + #greenlight + #bluelight
Procedure GreyImage(Image) ; Преобразование цветной картинки в черно-белую.
If StartDrawing(ImageOutput(Image))
Width = OutputWidth()-1
Height = OutputHeight()-1
For x= 0 To Width
For y=0 To Height
Color=Point(x,y) ; Цвет текущей точки.
grau=(Red(Color)*#redlight+Green(Color)*#greenlight+Blue(Color)*#bluelight) / #total ; Преобразование в серый.
If grau>30 ; Порог для белого цвета.
grau=255
Else
grau=0
EndIf
Plot(x,y,RGB(grau,grau,grau))
Next y
Next x
StopDrawing()
EndIf
EndProcedureСохранение в файле
UseGIFImageDecoder()
;UsePNGImageEncoder()
Declare GreyImage(Image)
Declare SaveFile(FileName.s, Image)
SourceImage.s = "Waves.gif"
ResultDir.s = "Out\"
ResultFile.s = "Res.bin"
DeleteFile(ResultDir+ResultFile)
If LoadImage(0, SourceImage)
If FileSize(ResultDir)<>-2 And CreateDirectory(ResultDir) = 0
MessageRequester("", "Не удалось создать папку")
Goto exit
EndIf
CountImg = ImageFrameCount(0)-1 ; Число кадров в гифке.
For i=0 To CountImg
SetImageFrame(0, i) ; Выбор кадра в гифке.
CopyImage(0, 1)
ResizeImage(1, 128, 64)
GreyImage(1) ; Преобразование цветной картинки в черно-белую
;res = SaveImage(1, ResultDir + i +".bmp")
res = SaveFile(ResultDir+ResultFile, 1) ; Сохранение данных в файле.
Debug "Кадр "+i+" "+res
FreeImage(1)
Next i
MessageRequester("", "Картинки сохранены")
Else
MessageRequester("", "Не удалось загрузить картинку")
EndIf
exit:
End
#redlight=30 : #greenlight=53 : #bluelight=11
#total = #redlight + #greenlight + #bluelight
Procedure GreyImage(Image) ; Преобразование цветной картинки в черно-белую.
If StartDrawing(ImageOutput(Image))
Width = OutputWidth()-1
Height = OutputHeight()-1
For x= 0 To Width
For y=0 To Height
Color=Point(x,y) ; Цвет текущей точки.
grau=(Red(Color)*#redlight+Green(Color)*#greenlight+Blue(Color)*#bluelight) / #total ; Преобразование в серый.
If grau>30 ; Порог для белого цвета.
grau=255
Else
grau=0
EndIf
Plot(x,y,RGB(grau,grau,grau))
Next y
Next x
StopDrawing()
EndIf
EndProcedure
Procedure SaveFile(FileName.s, Image) ; Сохранение данных в файле.
Res = 0
If OpenFile(0, FileName)
FileSeek(0, Lof(0)) ; Переход в конец файла.
Pos = 0
Byte.a = 0
If StartDrawing(ImageOutput(Image))
Width = OutputWidth()-1
Height = OutputHeight()-1
For x= 0 To Width
For y=0 To Height
Color=Point(x,y) ; Цвет текущей точки.
Pos + 1
If Color
Byte | 1
EndIf
Byte<<1
If Pos % 8 = 0
WriteAsciiCharacter(0, Byte)
Byte = 0
EndIf
Next y
Next x
StopDrawing()
Res = 1
EndIf
If Pos % 8 <> 0
WriteAsciiCharacter(0, Byte)
EndIf
CloseFile(0)
; Else
; MessageRequester("", "Не удалоcь открыть файл "+Chr(10)+FileName)
EndIf
ProcedureReturn Res
EndProcedureРезультат сохраняется в файле Res.bin. Т. к. цвета всего два, результат сохраняется побитово. При размере картинок 128x64 на каждую из них требуется 1024 байта.
Поделиться192017-08-20 19:45:19
Спасибо, попробую.