forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Лента из картинок (http://forum.boolean.name/showthread.php?t=37)

impersonalis 04.09.2005 23:43

Как изготовить ленту из картинок?

Я буду опиывать этот процесс в программе Irfan View.
1) Программа проста и удобна
2) Это не очередная спец-утилита, а очень удобный и

функциональный вьювер

Если хотите - ищите свежую версию, я выложу свою - с

плагинами и языками.

!!! Шаг 1. Запускаем программу
!!! Шаг 2. Жмём Изображение->Создать панорамное изображение
!!! Шаг 3. Оставляем горизонтальное направление
!!! Шаг 4 и 5. Составляем список картинок, оперируя интуитивно

понятными батонами.
!!! Шаг 6. Жмём Создать

Вот и всё :)

Приложение:
IrfanView.rar

impersonalis 04.09.2005 23:44

В картинках:


pax 04.10.2005 22:21

Я предлагаю сделать все средствами Blitz'а:

Код:

;Описание: Создание анимированной картинки из отдельных кадров

Global Cmd$=Trim(Lower(CommandLine$()));Получение содержимого коммандной строки
If Not Cmd$ Then RuntimeError "Не указано имя файла!"
If Not FileType(Cmd$) Then RuntimeError "Неверно указано имя файла! Пример: 'lesson1.exe File0000.bmp'"
Global ImgType$=GetImgType$(Cmd$);Получение типа картинки (bmp, jpg или png)
If Not ImgType$ Then RuntimeError "Поддерживаются только изображения следующих типов: BMP, JPG, PNG!"
Global ImgName$=Left(Cmd$,Len(Cmd$)-8);Например: File0000.bmp => 0000.bmp = 8 символов
Global ImgIndex%=Int(Mid(Cmd$,Len(Cmd$)-7,4));Получение индекса первой картинки (для случая если индекс начинается не с нуля)
Global maxWigth#=2048 maxHeight#=2048;Максимальный размер получаемой анимированной картинки
Global tempImg=LoadImage(Cmd$)
Global ImgWigth%=ImageWidth(tempImg): ImgHeigth%=ImageHeight(tempImg);Определение размеров одного кадра
FreeImage(tempImg)
Global HMaxImg#=Floor#(maxWigth#/ImgWigth%);Определение максимального кол-ва кадров по горизонтали
Global VMaxImg#=Floor#(maxHeight#/ImgHeigth%);Определение максимального кол-ва кадров по вертикали
Global MaxImg%=HMaxImg#*VMaxImg#;Определение максимального кол-ва кадров
Global ImgCount%=TotalFrames%();Определение кол-ва кадров (по существующим файлам)
If ImgCount%>MaxImg% Then RuntimeError "Уменьшите кло-во кадров или их размер!"
Global CountRows%=Int(Ceil#((ImgCount/HMaxImg)));Определение кол-ва рядов кадров
Global AnimImgWidth%
;определение ширины картинки
If ImgCount%<HMaxImg# Then
        AnimImgWidth% = ImgCount%*ImgWigth%
Else
        AnimImgWidth% = HMaxImg#*ImgWigth%
EndIf
Global AnimImg=CreateImage(AnimImgWidth%, CountRows%*ImgHeigth%); Создание временной картинки анимации
Global X%=0, Y%=0;Начальные значения смещений для рисования очередного кадра

SetBuffer ImageBuffer(AnimImg);Установка активным буфера картинки AnimImg
 
;Рисование кадров на картинке
For I%=0 To ImgCount%-1
        DrawImage(LoadImage(GetImgName$(ImgIndex%+I%)),X%,Y%)
        If (X%+ImgWigth%)>maxWigth# Then
 X%=0
 Y%=Y%+ImgHeigth%
        Else
 X%=X%+ImgWigth%
        EndIf
Next
;SaveBuffer(ImageBuffer(AnimImg),ImgName$+".bmp");Сохранение полученной картинки
SaveImage(AnimImg,ImgName$+".bmp");Эта строка аналогична предидущей

TT$="Картинка сохранена как "+ImgName+".bmp" + Chr$(13) + "Количество кадров: " + ImgCount% + Chr$(13)
TT$=TT$ + "Размер картинки: " + ImageWidth(AnimImg) +"X"+ ImageHeight(AnimImg)
FreeImage(AnimImg); Освобождение памяти
RuntimeError TT$
End;необязательный оператор т.к. оператор RuntimeError автоматически завершает программу

;функция проверки типа файла
Function GetImgType$(ImgFile$)
        T$=Right(ImgFile$,3)
        Select T$
        Case "bmp","jpg","png"
 Return T$
        Default
 Return ""
        End Select
End Function

;Функция рассчета кол-ва кадров
Function TotalFrames%()
Local I%=1
Local Index%=ImgIndex%
Repeat
        I%=I%+1
        Index%=Index%+1
 If (FileType(GetImgName$(Index%))<>1) Then Return I%-1
Forever
End Function

;Функция служит для получения имени файла кадра с индексом Ind.
;Например: Ind%=15,ImgName$="file", ImgType="bmp" => GetImgName$=file0015.bmp
Function GetImgName$(Ind%)
        If (Ind < 10 And Ind >= 0) Then        Return (ImgName$+"000"+Trim(Str(Ind%))+"."+ImgType$)
        If (Ind < 100 And Ind >= 10) Then Return (ImgName$+"00"+Trim(Str(Ind%))+"."+ImgType$)
        If (Ind < 1000 And Ind >= 100) Then Return (ImgName$+"0"+Trim(Str(Ind%))+"."+ImgType$)
        If (Ind < 10000 And Ind >= 1000) Then Return (ImgName$+Trim(Str(Ind%))+"."+ImgType$)
        RuntimeError "Error"
End Function



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

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