Changeset 2120


Ignore:
Timestamp:
Dec 6, 2007, 11:45:46 PM (12 years ago)
Author:
Sam Hocevar
Message:
  • Generate Bayer matrices on the fly.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • www/study/study.py

    r2119 r2120  
    322322# Output 2.3.2: 4x4 cluster dot
    323323# Output 2.3.3: 5x3 line dithering
    324 def test23x(src, mat):
     324def ordereddither(src, mat):
    325325    (w, h) = src.size()
    326326    dest = Image((w, h))
     
    335335    return dest
    336336
    337 DITHER_BAYER44 = \
    338     [[  0, 12,  3, 15],
    339      [  8,  4, 11,  7],
    340      [  2, 14,  1, 13],
    341      [ 10,  6,  9,  5]]
    342 DITHER_BAYER88 = \
    343     [[  0, 48, 12, 60,  3, 51, 15, 63],
    344      [ 32, 16, 44, 28, 35, 19, 47, 31],
    345      [  8, 56,  4, 52, 11, 59,  7, 55],
    346      [ 40, 24, 36, 20, 43, 27, 39, 23],
    347      [  2, 50, 14, 62,  1, 49, 13, 61],
    348      [ 34, 18, 46, 30, 33, 17, 45, 29],
    349      [ 10, 58,  6, 54,  9, 57,  5, 53],
    350      [ 42, 26, 38, 22, 41, 25, 37, 21]]
     337def makebayer(rank, mat = False):
     338    if not mat:
     339        mat = [[0]]
     340    if not rank:
     341        return mat
     342    n = len(mat)
     343    newmat = [[0] * n * 2 for i in range(n * 2)]
     344    for j in range(n):
     345        for i in range(n):
     346            x = mat[j][i]
     347            newmat[j * 2][i * 2] = x
     348            newmat[j * 2][i * 2 + 1] = x + n * n * 3
     349            newmat[j * 2 + 1][i * 2] = x + n * n * 2
     350            newmat[j * 2 + 1][i * 2 + 1] = x + n * n
     351    return makebayer(rank - 1, newmat)
     352
     353DITHER_BAYER44 = makebayer(2)
     354#  [[  0, 12,  3, 15],
     355#   [  8,  4, 11,  7],
     356#   [  2, 14,  1, 13],
     357#   [ 10,  6,  9,  5]]
     358
     359DITHER_BAYER88 = makebayer(3)
     360#  [[  0, 48, 12, 60,  3, 51, 15, 63],
     361#   [ 32, 16, 44, 28, 35, 19, 47, 31],
     362#   [  8, 56,  4, 52, 11, 59,  7, 55],
     363#   [ 40, 24, 36, 20, 43, 27, 39, 23],
     364#   [  2, 50, 14, 62,  1, 49, 13, 61],
     365#   [ 34, 18, 46, 30, 33, 17, 45, 29],
     366#   [ 10, 58,  6, 54,  9, 57,  5, 53],
     367#   [ 42, 26, 38, 22, 41, 25, 37, 21]]
     368
    351369DITHER_CLUSTER44 = \
    352370    [[ 12,  5,  6, 13],
     
    369387
    370388if chapter(2):
    371     test23x(lenna256bw, DITHER_BAYER44).save("out2-3-1.png")
    372     test23x(gradient256bw, DITHER_BAYER44).save("grad2-3-1.png")
    373 
    374     test23x(lenna256bw, DITHER_BAYER88).save("out2-3-1b.png")
    375     test23x(gradient256bw, DITHER_BAYER88).save("grad2-3-1b.png")
    376 
    377     test23x(lenna256bw, DITHER_CLUSTER44).save("out2-3-2.png")
    378     test23x(gradient256bw, DITHER_CLUSTER44).save("grad2-3-2.png")
    379 
    380     test23x(lenna256bw, DITHER_CLUSTER88).save("out2-3-2b.png")
    381     test23x(gradient256bw, DITHER_CLUSTER88).save("grad2-3-2b.png")
    382 
    383     test23x(lenna256bw, DITHER_LINE53).save("out2-3-3.png")
    384     test23x(gradient256bw, DITHER_LINE53).save("grad2-3-3.png")
     389    ordereddither(lenna256bw, DITHER_BAYER44).save("out2-3-1.png")
     390    ordereddither(gradient256bw, DITHER_BAYER44).save("grad2-3-1.png")
     391
     392    ordereddither(lenna256bw, DITHER_BAYER88).save("out2-3-1b.png")
     393    ordereddither(gradient256bw, DITHER_BAYER88).save("grad2-3-1b.png")
     394
     395    ordereddither(lenna256bw, DITHER_CLUSTER44).save("out2-3-2.png")
     396    ordereddither(gradient256bw, DITHER_CLUSTER44).save("grad2-3-2.png")
     397
     398    ordereddither(lenna256bw, DITHER_CLUSTER88).save("out2-3-2b.png")
     399    ordereddither(gradient256bw, DITHER_CLUSTER88).save("grad2-3-2b.png")
     400
     401    ordereddither(lenna256bw, DITHER_LINE53).save("out2-3-3.png")
     402    ordereddither(gradient256bw, DITHER_LINE53).save("grad2-3-3.png")
    385403
    386404# Output 2.4.1: uniform random dithering
Note: See TracChangeset for help on using the changeset viewer.