Blimp v.1.2 (2005-12-19)
Christian Heimke

Christian Heimke commited on 2011-07-15 09:18:13
Showing 11 changed files, with 97 additions and 84 deletions.

... ...
@@ -1,5 +1,5 @@
1 1
 /* BlinkenLightsInteractiveMovieProgram
2
- * version 1.1 date 2005-04-16
2
+ * version 1.2 date 2005-12-19
3 3
  * Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>
4 4
  * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5 5
  * a blinkenarea.org project
... ...
@@ -150,7 +150,7 @@ public class Blimp extends JApplet
150 150
     labelStatus.setText( "new movie..." );
151 151
     curFile = null;
152 152
     curMovie = new BlinkenMovie( defHeight, defWidth, defChannels, defMaxval );
153
-    curMovie.insertInfo( 0, "creator", "Blimp (version 1.1 date 2005-04-16)" );
153
+    curMovie.insertInfo( 0, "creator", "Blimp (version 1.2 date 2005-12-19)" );
154 154
     curMovie.insertFrame( 0, new BlinkenFrame( defHeight, defWidth, defChannels, defMaxval, defDuration ) );
155 155
     curMovieChanged = false;
156 156
 
... ...
@@ -944,7 +944,7 @@ public class Blimp extends JApplet
944 944
   {
945 945
     JOptionPane.showMessageDialog( dialogParent,
946 946
                                    "BlinkenLightsInteractiveMovieProgram\n" +
947
-                                   "version 1.1 date 2005-04-16\n" +
947
+                                   "version 1.2 date 2005-12-19\n" +
948 948
                                    "Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>\n" +
949 949
                                    "Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html\n" +
950 950
                                    "a blinkenarea.org project\n" +
... ...
@@ -1637,7 +1637,7 @@ public class Blimp extends JApplet
1637 1637
     //initialize current movie, frame
1638 1638
     curDir = new File( "." );
1639 1639
     curMovie = new BlinkenMovie( defHeight, defWidth, defChannels, defMaxval );
1640
-    curMovie.insertInfo( 0, "creator", "Blimp (version 1.1 date 2005-04-16)" );
1640
+    curMovie.insertInfo( 0, "creator", "Blimp (version 1.2 date 2005-12-19)" );
1641 1641
     curMovie.insertFrame( 0, new BlinkenFrame( defHeight, defWidth, defChannels, defMaxval, defDuration ) );
1642 1642
     curFrame = null;
1643 1643
 
... ...
@@ -2220,7 +2220,7 @@ public class Blimp extends JApplet
2220 2220
 
2221 2221
     //running as command line tool
2222 2222
     System.out.println( "BlinkenLightsInteractiveMovieProgram\n" +
2223
-                        "version 1.1 date 2005-04-16\n" +
2223
+                        "version 1.2 date 2005-12-19\n" +
2224 2224
                         "Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>\n" +
2225 2225
                         "Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html\n" +
2226 2226
                         "a blinkenarea.org project\n" +
... ...
@@ -2232,7 +2232,7 @@ public class Blimp extends JApplet
2232 2232
 
2233 2233
     //get initial movie
2234 2234
     movie = new BlinkenMovie( defHeight, defWidth, defChannels, defMaxval );
2235
-    movie.insertInfo( 0, "creator", "Blimp (version 1.1 date 2005-04-16)" );
2235
+    movie.insertInfo( 0, "creator", "Blimp (version 1.2 date 2005-12-19)" );
2236 2236
     movie.insertFrame( 0, new BlinkenFrame( defHeight, defWidth, defChannels, defMaxval, defDuration ) );
2237 2237
 
2238 2238
     //process parameters
... ...
@@ -1,5 +1,5 @@
1 1
 /* BlinkenLightsInteractiveMovieProgram
2
- * version 1.1 date 2005-04-16
2
+ * version 1.2 date 2005-12-19
3 3
  * Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>
4 4
  * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5 5
  * a blinkenarea.org project
... ...
@@ -1,5 +1,5 @@
1 1
 /* BlinkenLightsInteractiveMovieProgram
2
- * version 1.1 date 2005-04-16
2
+ * version 1.2 date 2005-12-19
3 3
  * Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>
4 4
  * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5 5
  * a blinkenarea.org project
... ...
@@ -16,7 +16,7 @@ public class BlinkenFrame
16 16
   private int channels;
17 17
   private int maxval;
18 18
   private int duration;
19
-  private byte[][][] data;
19
+  private byte[][] data;
20 20
 
21 21
   BlinkenFrame( int height, int width, int channels, int maxval, int duration )
22 22
   {
... ...
@@ -36,31 +36,31 @@ public class BlinkenFrame
36 36
     this.channels = channels;
37 37
     this.maxval = maxval;
38 38
     this.duration = duration;
39
-    data = new byte[height][width][channels];
39
+    data = new byte[height][width * channels];
40 40
   }
41 41
 
42 42
   BlinkenFrame( BlinkenFrame frame )
43 43
   {
44
-    int y, x, c;
44
+    int y, x, c, i;
45 45
     height = frame.height;
46 46
     width = frame.width;
47 47
     channels = frame.channels;
48 48
     maxval = frame.maxval;
49 49
     duration = frame.duration;
50
-    data = new byte[height][width][channels];
50
+    data = new byte[height][width * channels];
51 51
     for( y = 0; y < height; y++ )
52
-      for( x = 0; x < width; x++ )
53
-        for( c = 0; c < channels; c++ )
54
-          data[y][x][c] = frame.data[y][x][c];
52
+      for( x = 0, i = 0; x < width; x++ )
53
+        for( c = 0; c < channels; c++, i++ )
54
+          data[y][i] = frame.data[y][i];
55 55
   }
56 56
 
57 57
   public void clear( )
58 58
   {
59
-    int x, y, c;
59
+    int x, y, c, i;
60 60
     for( y = 0; y < height; y++ )
61
-      for( x = 0; x < width; x++ )
62
-        for( c = 0; c < channels; c++ )
63
-          data[y][x][c] = 0;
61
+      for( x = 0, i = 0; x < width; x++ )
62
+        for( c = 0; c < channels; c++, i++ )
63
+          data[y][i] = 0;
64 64
   }
65 65
 
66 66
   public int getHeight( )
... ...
@@ -101,7 +101,7 @@ public class BlinkenFrame
101 101
         x < 0 || x >= width ||
102 102
 	c < 0 || c >= channels )
103 103
       return 0;
104
-    return data[y][x][c];
104
+    return data[y][x * channels + c];
105 105
   }
106 106
 
107 107
   public void setPixel( int y, int x, int c, byte val )
... ...
@@ -112,7 +112,7 @@ public class BlinkenFrame
112 112
       return;
113 113
     if( val > maxval )
114 114
       val = (byte)maxval;
115
-    data[y][x][c] = val;
115
+    data[y][x * channels + c] = val;
116 116
   }
117 117
 
118 118
   public Color getColor( int y, int x )
... ...
@@ -122,15 +122,16 @@ public class BlinkenFrame
122 122
         channels < 1 )
123 123
       return new Color( 0, 0, 0 );
124 124
     if( channels == 1 )
125
-      return new Color( (((int)data[y][x][0] & 0xFF) * 255 + maxval / 2) / maxval,
126
-                        (((int)data[y][x][0] & 0xFF) * 255 + maxval / 2) / maxval,
127
-                        (((int)data[y][x][0] & 0xFF) * 255 + maxval / 2) / maxval );
125
+      return new Color( (((int)data[y][x * 1 + 0] & 0xFF) * 255 + maxval / 2) / maxval,
126
+                        (((int)data[y][x * 1 + 0] & 0xFF) * 255 + maxval / 2) / maxval,
127
+                        (((int)data[y][x * 1 + 0] & 0xFF) * 255 + maxval / 2) / maxval );
128 128
     if( channels == 2 )
129
-      return new Color( (((int)data[y][x][0] & 0xFF) * 255 + maxval / 2) / maxval,
130
-                        (((int)data[y][x][1] & 0xFF) * 255 + maxval / 2) / maxval, 0 );
131
-    return new Color( (((int)data[y][x][0] & 0xFF) * 255 + maxval / 2) / maxval,
132
-                      (((int)data[y][x][1] & 0xFF) * 255 + maxval / 2) / maxval,
133
-                      (((int)data[y][x][2] & 0xFF) * 255 + maxval / 2) / maxval );
129
+      return new Color( (((int)data[y][x * 2 + 0] & 0xFF) * 255 + maxval / 2) / maxval,
130
+                        (((int)data[y][x * 2 + 1] & 0xFF) * 255 + maxval / 2) / maxval, 0 );
131
+    int i = x * channels;
132
+    return new Color( (((int)data[y][i + 0] & 0xFF) * 255 + maxval / 2) / maxval,
133
+                      (((int)data[y][i + 1] & 0xFF) * 255 + maxval / 2) / maxval,
134
+                      (((int)data[y][i + 2] & 0xFF) * 255 + maxval / 2) / maxval );
134 135
   }
135 136
 
136 137
   public void setColor( int y, int x, Color color )
... ...
@@ -139,30 +140,31 @@ public class BlinkenFrame
139 140
     if( y < 0 || y >= height ||
140 141
         x < 0 || x >= width )
141 142
       return;
143
+    int i = x * channels;
142 144
     alpha = color.getAlpha( );
143 145
     alpha_ = 255 - alpha;
144 146
     if( channels >= 1 )
145
-      data[y][x][0] = (byte)(( ((color.getRed( ) * maxval + 127) / 255) * alpha
146
-                             + ((int)data[y][x][0] & 0xFF) * alpha_
147
+      data[y][i + 0] = (byte)(( ((color.getRed( ) * maxval + 127) / 255) * alpha
148
+                              + ((int)data[y][i + 0] & 0xFF) * alpha_
147 149
                               ) / 255);
148 150
     if( channels >= 2 )
149
-      data[y][x][1] = (byte)(( ((color.getGreen( ) * maxval + 127) / 255) * alpha
150
-                             + ((int)data[y][x][1] & 0xFF) * alpha_
151
+      data[y][i + 1] = (byte)(( ((color.getGreen( ) * maxval + 127) / 255) * alpha
152
+                              + ((int)data[y][i + 1] & 0xFF) * alpha_
151 153
                               ) / 255);
152 154
     if( channels >= 3 )
153
-      data[y][x][2] = (byte)(( ((color.getBlue( ) * maxval + 127) / 255) * alpha
154
-                             + ((int)data[y][x][2] & 0xFF) * alpha_
155
+      data[y][i + 2] = (byte)(( ((color.getBlue( ) * maxval + 127) / 255) * alpha
156
+                              + ((int)data[y][i + 2] & 0xFF) * alpha_
155 157
                               ) / 255);
156 158
     for( c = 3; c < channels; c++ )
157
-      data[y][x][c] = (byte)(( 0
158
-                             + ((int)data[y][x][c] & 0xFF) * alpha_
159
+      data[y][i + c] = (byte)(( 0
160
+                              + ((int)data[y][i + c] & 0xFF) * alpha_
159 161
                               ) / 255);
160 162
   }
161 163
 
162 164
   public void resize( int height, int width, int channels, int maxval )
163 165
   {
164
-    byte[][][] data;
165
-    int y, x, c;
166
+    byte[][] data;
167
+    int y, x, c, i;
166 168
     int emptyY, emptyX, skipY, skipX, rangeY, rangeX, val, div;
167 169
 
168 170
     if( height < 1 ) height = 1;
... ...
@@ -181,11 +183,11 @@ public class BlinkenFrame
181 183
       return;
182 184
 
183 185
     //allocate new data array
184
-    data = new byte[height][width][channels];
186
+    data = new byte[height][width * channels];
185 187
     for( y = 0; y < height; y++ )
186
-      for( x = 0; x < width; x++ )
187
-        for( c = 0; c < channels; c++ )
188
-          data[y][x][c] = 0;
188
+      for( x = 0, i = 0; x < width; x++ )
189
+        for( c = 0; c < channels; c++, i++ )
190
+          data[y][i] = 0;
189 191
 
190 192
     //get number of pixels to skip / to leave empty in X and Y direction
191 193
     if( height > this.height )
... ...
@@ -218,22 +220,24 @@ public class BlinkenFrame
218 220
     {
219 221
       for( x = 0; x < rangeX; x++ )
220 222
       {
223
+        int srcI = (skipX + x) * this.channels;
224
+        int destI = (emptyX + x) * channels;
221 225
         if( channels >= this.channels ) //add channels: copy last channel into new channels
222 226
 	{
223 227
           for( c = 0; c < this.channels; c++ )
224
-            data[emptyY + y][emptyX + x][c] = (byte)((((int)this.data[skipY + y][skipX + x][c] & 0xFF) * maxval + this.maxval / 2) / this.maxval);
228
+            data[emptyY + y][destI + c] = (byte)((((int)this.data[skipY + y][srcI + c] & 0xFF) * maxval + this.maxval / 2) / this.maxval);
225 229
 	  for( ; c < channels; c++ )
226
-	    data[emptyY + y][emptyX + x][c] = data[emptyY + y][emptyX + x][this.channels - 1];
230
+	    data[emptyY + y][destI + c] = data[emptyY + y][destI + this.channels - 1];
227 231
 	}
228 232
 	else //remove channels: merge leftover channels with last kept channel
229 233
 	{
230 234
           val = 0;
231 235
           for( c = 0; c < channels - 1; c++ )
232
-            data[emptyY + y][emptyX + x][c] = (byte)((((int)this.data[skipY + y][skipX + x][c] & 0xFF) * maxval + this.maxval / 2) / this.maxval);
236
+            data[emptyY + y][destI + c] = (byte)((((int)this.data[skipY + y][srcI + c] & 0xFF) * maxval + this.maxval / 2) / this.maxval);
233 237
           for( c = channels - 1; c < this.channels; c++ )
234
-            val += (int)this.data[skipY + y][skipX + x][c] & 0xFF;
238
+            val += (int)this.data[skipY + y][srcI + c] & 0xFF;
235 239
           div = this.maxval * (this.channels - channels + 1);
236
-          data[emptyY + y][emptyX + x][channels - 1] = (byte)((val * maxval + div / 2) / div);
240
+          data[emptyY + y][destI + channels - 1] = (byte)((val * maxval + div / 2) / div);
237 241
 	}
238 242
       }
239 243
     }
... ...
@@ -247,9 +251,9 @@ public class BlinkenFrame
247 251
 
248 252
   public void scale( int height, int width )
249 253
   {
250
-    byte[][][] data;
254
+    byte[][] data;
251 255
     double scaleHor, scaleVer, ox, oy, ox1, oy1, val;
252
-    int c, nx, ny, x, y, oxi, oyi, ox1i, oy1i;
256
+    int c, nx, nx_c, ny, x, x_c, y, oxi, oxi_c, oyi, ox1i, ox1i_c, oy1i;
253 257
 
254 258
     if( height < 1 ) height = 1;
255 259
     if( height > 1024 ) height = 1024;
... ...
@@ -264,39 +268,41 @@ public class BlinkenFrame
264 268
     scaleVer = (double)height / (double)this.height;
265 269
 
266 270
     //allocate new data array
267
-    data = new byte[height][width][channels];
271
+    data = new byte[height][width * channels];
268 272
 
269 273
     //scale every channel
270 274
     for( c = 0; c < channels; c++ )
271 275
     {
272 276
       for( ny = 0; ny < height; ny++ )
273 277
       {
274
-        for( nx = 0; nx < width; nx++ )
278
+        for( nx = 0, nx_c = c; nx < width; nx++, nx_c += channels )
275 279
         {
276 280
           oy = (double)ny / scaleVer; //sub-pixel exact range in old picture
277 281
           ox = (double)nx / scaleHor;
278 282
           oy1 = (double)(ny + 1) / scaleVer - 0.000001;
279 283
           ox1 = (double)(nx + 1) / scaleHor - 0.000001;
280 284
           if( oy < 0 || ox < 0 || oy1 >= this.height || ox1 >= this.width) //out of old picture
281
-            data[ny][nx][c] = 0;
285
+            data[ny][nx_c] = 0;
282 286
           else
283 287
           {
284 288
             oyi = (int)oy;
285 289
             oxi = (int)ox;
290
+            oxi_c = oxi * channels + c;
286 291
             oy1i = (int)oy1;
287 292
             ox1i = (int)ox1;
293
+            ox1i_c = ox1i * channels + c;
288 294
             if( oyi == oy1i )
289 295
             {
290 296
               if( oxi == ox1i) //one source pixel
291 297
               {
292
-                val = (double)((int)this.data[oyi][oxi][c] & 0xFF);
298
+                val = (double)((int)this.data[oyi][oxi_c] & 0xFF);
293 299
               }
294 300
               else //one line of source pixels
295 301
               {
296
-                val = (double)((int)this.data[oyi][oxi][c] & 0xFF) * (1 - ox + oxi)
297
-                    + (double)((int)this.data[oyi][ox1i][c] & 0xFF) * (ox1 - ox1i);
298
-                for( x = oxi + 1; x < ox1i; x++ )
299
-                  val += (double)((int)this.data[oyi][x][c] & 0xFF);
302
+                val = (double)((int)this.data[oyi][oxi_c] & 0xFF) * (1 - ox + oxi)
303
+                    + (double)((int)this.data[oyi][ox1i_c] & 0xFF) * (ox1 - ox1i);
304
+                for( x_c = oxi_c + channels; x_c < ox1i_c; x_c += channels )
305
+                  val += (double)((int)this.data[oyi][x_c] & 0xFF);
300 306
                 val /= ox1 - ox;
301 307
               }
302 308
             }
... ...
@@ -304,35 +310,35 @@ public class BlinkenFrame
304 310
             {
305 311
               if( oxi == ox1i )
306 312
               {
307
-                val = (double)((int)this.data[oyi][oxi][c] & 0xFF) * (1 - oy + oyi)
308
-                    + (double)((int)this.data[oy1i][oxi][c] & 0xFF) * (oy1 - oy1i);
313
+                val = (double)((int)this.data[oyi][oxi_c] & 0xFF) * (1 - oy + oyi)
314
+                    + (double)((int)this.data[oy1i][oxi_c] & 0xFF) * (oy1 - oy1i);
309 315
                 for( y = oyi + 1; y < oy1i; y++ )
310
-                  val += (double)((int)this.data[y][oxi][c] & 0xFF);
316
+                  val += (double)((int)this.data[y][oxi_c] & 0xFF);
311 317
                 val /= oy1 - oy;
312 318
               }
313 319
               else //rectangle of source pixels
314 320
               {
315
-                val = (double)((int)this.data[oyi][oxi][c] & 0xFF) * (1 - oy + oyi) * (1 - ox + oxi)
316
-                    + (double)((int)this.data[oyi][ox1i][c] & 0xFF) * (1 - oy + oyi) * (ox1 - ox1i)
317
-                    + (double)((int)this.data[oy1i][oxi][c] & 0xFF) * (oy1 - oy1i) * (1 - ox + oxi)
318
-                    + (double)((int)this.data[oy1i][ox1i][c] & 0xFF) * (oy1 - oy1i) * (ox1 - ox1i);
321
+                val = (double)((int)this.data[oyi][oxi_c] & 0xFF) * (1 - oy + oyi) * (1 - ox + oxi)
322
+                    + (double)((int)this.data[oyi][ox1i_c] & 0xFF) * (1 - oy + oyi) * (ox1 - ox1i)
323
+                    + (double)((int)this.data[oy1i][oxi_c] & 0xFF) * (oy1 - oy1i) * (1 - ox + oxi)
324
+                    + (double)((int)this.data[oy1i][ox1i_c] & 0xFF) * (oy1 - oy1i) * (ox1 - ox1i);
319 325
                 for( y = oyi + 1; y < oy1i; y++ )
320 326
                 {
321
-                  val += (double)((int)this.data[y][oxi][c] & 0xFF) * (1 - ox + oxi)
322
-                       + (double)((int)this.data[y][ox1i][c] & 0xFF) * (ox1 - ox1i);
327
+                  val += (double)((int)this.data[y][oxi_c] & 0xFF) * (1 - ox + oxi)
328
+                       + (double)((int)this.data[y][ox1i_c] & 0xFF) * (ox1 - ox1i);
323 329
                 }
324
-                for( x = oxi + 1; x < ox1i; x++ )
330
+                for( x_c = oxi_c + channels; x_c < ox1i_c; x_c += channels )
325 331
                 {
326
-                  val += (double)((int)this.data[oyi][x][c] & 0xFF) * (1 - oy + oyi)
327
-                       + (double)((int)this.data[oy1i][x][c] & 0xFF) * (oy1 - oy1i);
332
+                  val += (double)((int)this.data[oyi][x_c] & 0xFF) * (1 - oy + oyi)
333
+                       + (double)((int)this.data[oy1i][x_c] & 0xFF) * (oy1 - oy1i);
328 334
                 }
329 335
                 for( y = oyi + 1; y < oy1i; y++ )
330
-                  for( x = oxi + 1; x < ox1i; x++ )
331
-                    val += (double)((int)this.data[y][x][c] & 0xFF);
336
+                  for( x_c = oxi_c + channels; x_c < ox1i_c; x_c += channels )
337
+                    val += (double)((int)this.data[y][x_c] & 0xFF);
332 338
                 val /= (oy1 - oy) * (ox1 - ox);
333 339
               }
334 340
             }
335
-            data[ny][nx][c] = (byte)(int)(val + 0.5);
341
+            data[ny][nx_c] = (byte)(int)(val + 0.5);
336 342
           }
337 343
         } //for( nx ...
338 344
       } //for( ny ...
... ...
@@ -346,14 +352,14 @@ public class BlinkenFrame
346 352
   public String toString( )
347 353
   {
348 354
     String str = "";
349
-    int h, w, c, val;
355
+    int h, w, c, i, val;
350 356
     for( h = 0; h < height; h++ )
351 357
     {
352
-      for( w = 0; w < width; w++ )
358
+      for( w = 0, i = 0; w < width; w++ )
353 359
       {
354 360
         val = 0;
355
-        for( val = 0, c = 0; c < channels; c++ )
356
-          val += ((int)data[h][w][c] & 0xFF);
361
+        for( val = 0, c = 0; c < channels; c++, i++ )
362
+          val += ((int)data[h][i] & 0xFF);
357 363
         val = val * 7 / maxval / channels;
358 364
         str = str + " -+*%#&@".substring( val, val + 1); 
359 365
       }
... ...
@@ -1,5 +1,5 @@
1 1
 /* BlinkenLightsInteractiveMovieProgram
2
- * version 1.1 date 2005-04-16
2
+ * version 1.2 date 2005-12-19
3 3
  * Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>
4 4
  * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5 5
  * a blinkenarea.org project
... ...
@@ -1,5 +1,5 @@
1 1
 /* BlinkenLightsInteractiveMovieProgram
2
- * version 1.1 date 2005-04-16
2
+ * version 1.2 date 2005-12-19
3 3
  * Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>
4 4
  * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5 5
  * a blinkenarea.org project
... ...
@@ -1,5 +1,5 @@
1 1
 /* BlinkenLightsInteractiveMovieProgram
2
- * version 1.1 date 2005-04-16
2
+ * version 1.2 date 2005-12-19
3 3
  * Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>
4 4
  * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5 5
  * a blinkenarea.org project
... ...
@@ -1,5 +1,5 @@
1 1
 /* BlinkenLightsInteractiveMovieProgram
2
- * version 1.1 date 2005-04-16
2
+ * version 1.2 date 2005-12-19
3 3
  * Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>
4 4
  * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5 5
  * a blinkenarea.org project
... ...
@@ -1,5 +1,5 @@
1 1
 /* BlinkenLightsInteractiveMovieProgram
2
- * version 1.1 date 2005-04-16
2
+ * version 1.2 date 2005-12-19
3 3
  * Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>
4 4
  * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5 5
  * a blinkenarea.org project
... ...
@@ -1,5 +1,5 @@
1 1
 /* BlinkenLightsInteractiveMovieProgram
2
- * version 1.1 date 2005-04-16
2
+ * version 1.2 date 2005-12-19
3 3
  * Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>
4 4
  * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5 5
  * a blinkenarea.org project
... ...
@@ -4,6 +4,13 @@ Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
4 4
 a blinkenarea.org project
5 5
 powered by eventphone.de
6 6
 
7
+version 1.2 data 2005-12-19
8
+---------------------------
9
+ - changed internal format of pixel data
10
+   - old format: data[y][x][c]
11
+   - new format: data[y][x * channels + c]
12
+   - faster and uses less memory
13
+
7 14
 version 1.1 date 2005-04-16
8 15
 ---------------------------
9 16
  - frame scroll bar now has block increment of 1
... ...
@@ -1,5 +1,5 @@
1 1
 # BlinkenLightsInteractiveMovieProgram
2
-# version 1.1 date 2005-04-16
2
+# version 1.2 date 2005-12-19
3 3
 # Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>
4 4
 # Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5 5
 # a blinkenarea.org project
6 6