Файл:Wfm floodfill animation queue.gif

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Wfm_floodfill_animation_queue.gif(200 × 200 пікселів, розмір файлу: 31 КБ, MIME-тип: image/gif, кільцеве, 175 кадрів, 19с)

Wikimedia Commons logo Відомості про цей файл містяться на Вікісховищі — централізованому сховищі вільних файлів мультимедіа для використання у проектах Фонду Вікімедіа.

Опис файлу

Опис Example image showing Floodfill animated using a queue structure
Час створення
Джерело Власна робота
Автор Finlay McWalter
Інші версії image:Wfm_floodfill_animation_stack.gif

Ліцензування

Я, власник авторських прав на цей твір, добровільно публікую його на умовах таких ліцензій:
GNU head Дозволяється копіювати, розповсюджувати та/або модифікувати цей документ на умовах ліцензії GNU FDL версії 1.2 або більш пізньої, виданої Фондом вільного програмного забезпечення, без незмінних розділів, без текстів, які розміщені на першій та останній обкладинці. Копія ліцензії знаходиться у розділі GNU Free Documentation License.
w:uk:Creative Commons
зазначення авторства поширення на тих же умовах
This file is licensed under the Creative Commons Attribution-Share Alike Attribution-Share Alike 4.0 International, 3.0 Unported, 2.5 Generic, 2.0 Generic and 1.0 Generic license.
Ви можете вільно:
  • ділитися – копіювати, поширювати і передавати твір
  • модифікувати – переробляти твір
При дотриманні таких умов:
  • зазначення авторства – Ви повинні вказати авторство, надати посилання на ліцензію і вказати, чи якісь зміни було внесено до оригінального твору. Ви можете зробити це в будь-який розсудливий спосіб, але так, щоб він жодним чином не натякав на те, наче ліцензіар підтримує Вас чи Ваш спосіб використання твору.
  • поширення на тих же умовах – Якщо ви змінюєте, перетворюєте або створюєте іншу похідну роботу на основі цього твору, ви можете поширювати отриманий у результаті твір тільки на умовах такої ж або сумісної ліцензії.
Ви можете обрати ліцензію на ваш розсуд.

Creation

Created using the following Python program:

#!/usr/bin/python

# Basic Python program to render animations for Wikipedia floodfill
# article (not a general floodfill example, very far from a shining example).

# This example uses the four-way floodfill algorithm, and generates 
# example animations using both a stack and a queue as intermediate
# storage schemes.

# Requirements:
# * python
# * Python Imaging Library (PIL)
# * ImageMagick (used to compile intermediate images to GIF animations)
# 
# The os.system() calls are written for unix; changing them for windows
# should be trivial

# Copyright (C) 2008 Finlay McWalter. 
# Licence: your choice from GFDL, GPLv2, GPLv3, CC-by-SA2.0
 

import os, Image, ImageColor, ImageDraw
from collections import deque

def floodfill(img, 
              (startx, starty), 
              targetcolour, 
              newcolour, 
              dumpEveryX=70,
              pattern=None,
              useQueue=False,
              startIndex=0):
    
    if useQueue:
        workpile = deque();
        getpoint = workpile.popleft
    else:
        workpile = []
        getpoint = workpile.pop

    max=0
    count=0

    workpile.append((startx,starty))
    while len(workpile)> 0:
        x,y=getpoint()
        
        if len(workpile)> max: 
            max=len(workpile)

        if img.getpixel((x,y)) == targetcolour:
            img.putpixel((x,y), newcolour)
            
            # every few pixels drawn, dump an image showing our progress
            count += 1
            if (count%dumpEveryX)==0 and pattern != None:
                img.save(pattern %(startIndex+count))

            # this demo code doesn't handle the case where we get to the edge
            if img.getpixel((x-1,y))== targetcolour: workpile.append((x-1,y))
            if img.getpixel((x+1,y))== targetcolour: workpile.append((x+1,y))
            if img.getpixel((x,y-1))== targetcolour: workpile.append((x,y-1))
            if img.getpixel((x,y+1))== targetcolour: workpile.append((x,y+1))

    print '    done with count %d, max %d' % (count,max)
    return count

def make_floodfill_example(filename, use_queue):
    print 'making image '+filename
    print '  removing old files'
    os.system('rm -f out*.png ' +filename )

    i = Image.new('RGB', (200,200), 'white')

    # draw a rough ying-yang
    draw = ImageDraw.Draw(i)
    draw.ellipse((30,30,170,170), outline='black')
    draw.arc((65,100,135,170), 90,270, fill='black')
    draw.arc((64,30,134,100), 270,90, fill='black')
    draw.ellipse((80,45,120,85), outline='black')
    draw.ellipse((80,115,120,155), outline='black')
    del draw

    print '  filling'
    redcount = floodfill(i, 
                         (100, 90), 
                         (255,255,255), #white
                         (255,0,0), #red
                         useQueue = use_queue,
                         pattern='out_%05d.png')

    print '  filling'
    bluecount = floodfill(i,
                          (110,110),
                          (255,255,255), # white
                          (0,0,255), # blue
                          useQueue = use_queue,
                          pattern='out_%05d.png',
                          startIndex=redcount)

    # push some extra frames of animation so we can see the finished fill
    for x in range(redcount+bluecount,redcount+bluecount+20):
        i.save('out_%05d.png' %(x))    

    print '  converting to animated GIF - this may take several minutes'
    os.system ('convert -loop 0 out*.png '+filename)

# draw one example image using a FIFO as the means of storing points,
# and another using a LIFO.
make_floodfill_example('wfm_floodfill_animation_queue.gif', True)
make_floodfill_example('wfm_floodfill_animation_stack.gif', False)
print 'done'

Підписи

Додайте однорядкове пояснення, що саме репрезентує цей файл

Об'єкти, показані на цьому файлі

зображує

Історія файлу

Клацніть на дату/час, щоб переглянути, як тоді виглядав файл.

Дата/часМініатюраРозмір об'єктаКористувачКоментар
поточний23:07, 8 квітня 2014Мініатюра для версії від 23:07, 8 квітня 2014200 × 200 (31 КБ)CountingPineOptimise file size using GIMP
15:28, 24 серпня 2008Мініатюра для версії від 15:28, 24 серпня 2008200 × 200 (241 КБ)Finlay McWalter{{Information |Description= |Source= |Date= |Author= |Permission= |other_versions= }}
14:28, 24 серпня 2008Мініатюра для версії від 14:28, 24 серпня 2008200 × 200 (236 КБ)Finlay McWalter{{Information |Description=Example image showing Floodfill animated using a queue structure |Source=self made |Date=24th August 2008 |Author=Finlay McWalter |Permission=see below |other_versions=[[:image:Wfm_floodfill_animation_queue.gif

Така сторінка використовує цей файл:

Глобальне використання файлу

Цей файл використовують такі інші вікі: