|
2 | 2 | var _ = window._; |
3 | 3 | var scale = 50; |
4 | 4 | var noneImage = { |
| 5 | + index: 0, |
5 | 6 | draw: function () { |
6 | 7 | }, |
7 | 8 | getState: function () { |
8 | | - return {} |
| 9 | + return {index:0} |
9 | 10 | }, |
10 | 11 | setState: function () { |
11 | 12 | } |
|
16 | 17 | imageCanvas: $('#imagecanvas'), |
17 | 18 | tmpctx: $('#imagecanvas')[0].getContext('2d'), |
18 | 19 | images: {}, |
| 20 | + imageObjects: [noneImage], |
19 | 21 | subject: noneImage, |
20 | 22 | draw: function draw() { |
21 | 23 | if (Game.can_draw()) { |
|
51 | 53 | return game.subject.getState(); |
52 | 54 | }, |
53 | 55 | set_state: function setState(state) { |
54 | | - if (!state.data) { |
55 | | - game.subject = noneImage; |
56 | | - } else { |
57 | | - game.subject = ImageWrapper(state); |
58 | | - } |
| 56 | + game.subject = game.imageObjects[state.index]; |
| 57 | + game.subject.setState(state) |
59 | 58 | } |
60 | 59 | }; |
61 | 60 | })(); |
|
90 | 89 | setData: function (data, i) { |
91 | 90 | pixel.data = imgData.data; |
92 | 91 | pixel.index = i; |
| 92 | + pixel.r = data[index*4 + 0]; |
| 93 | + pixel.g = data[index*4 + 1]; |
| 94 | + pixel.b = data[index*4 + 2]; |
| 95 | + pixel.a = data[index*4 + 3]; |
93 | 96 | }, |
94 | 97 | setRed: function setRed (r) { |
95 | 98 | pixel.r = r; |
|
129 | 132 | pixel.data[pixel.index*4 + 2] = b; |
130 | 133 | } |
131 | 134 | }, |
| 135 | + getAverage: function getAverage () { |
| 136 | + return Math.floor((pixel.r + pixel.b + pixel.g) / 3) |
| 137 | + }, |
| 138 | + getBit: function getBit (threshold) { |
| 139 | + threshold = threshold || 128 |
| 140 | + return (threshold <= pixel.getAverage())?1:0; |
| 141 | + }, |
| 142 | + setBit: function setBit (n) { |
| 143 | + imgData.data[i*4 + 0] = pixel.r = 255 * (n) // R |
| 144 | + imgData.data[i*4 + 1] = pixel.b = 255 * (n) // G |
| 145 | + imgData.data[i*4 + 2] = pixel.g = 255 * (n) // B |
| 146 | + imgData.data[i*4 + 3] = pixel.a = 255 // A |
| 147 | + }, |
132 | 148 | __str__: function toString() { |
133 | 149 | return pixel.hex(); |
134 | 150 | }, |
|
168 | 184 | } |
169 | 185 | } |
170 | 186 |
|
171 | | - var ImageWrapper = function (imgData) { |
172 | | - this.imageData = imgData; |
| 187 | + var ImageWrapper = function (imageData) { |
| 188 | + var imgData = {}; |
| 189 | + imgData.imageData = imageData; |
| 190 | + imgData.width = imageData.width; |
| 191 | + imgData.height = imageData.height; |
173 | 192 | imgData.zoom = imgData.zoom || 1; |
174 | | - imageData.getPixel = function getPixel(x, y) { |
| 193 | + imgData.index = game.imageObjects.length; |
| 194 | + game.imageObjects.push(imgData); |
| 195 | + imgData.getPixel = function getPixel(x, y) { |
175 | 196 | return imgData.pixelData[x * imgData.width + y] |
176 | 197 | } |
177 | | - imageData.setPixelData = function setPixelData (data) { |
178 | | - var pixelData = imgData.pixelData = [] |
179 | | - for (var i = 0; i < imgData.data.length;i+=4){ |
180 | | - pixel = Pixel(imgData.data, i); |
181 | | - pixelData.push(pixel); |
| 198 | + imgData.setPixelData = function setPixelData (imageData) { |
| 199 | + var pixelData = imageData.pixelData; |
| 200 | + if (!pixelData) { |
| 201 | + pixelData = imgData.pixelData = [] |
| 202 | + for (var i = 0; i < imageData.data.length;i+=4){ |
| 203 | + pixel = Pixel(imageData.data, i/4); |
| 204 | + pixelData.push(pixel); |
| 205 | + } |
| 206 | + } else { |
| 207 | + for (var i = 0; i < imgData.pixelData.length;i+=1){ |
| 208 | + imgData.pixelData[i].setData(imageData.data, i); |
| 209 | + } |
182 | 210 | } |
183 | 211 | } |
184 | 212 | imgData.setZoom = function setZoom (zoom) { |
185 | 213 | imgData.zoom = zoom; |
186 | 214 | } |
187 | 215 | imgData.getState = function getState() { |
188 | | - game.tmpctx.putImageData(imgData, 0, 0); |
189 | | - var data = game.tmpctx.getImageData(0, 0, imgData.width, imgData.height); |
190 | | - data.zoom = imgData.zoom; |
191 | | - return data; |
| 216 | + game.tmpctx.putImageData(imgData.imageData, 0, 0); |
| 217 | + var data = game.tmpctx.getImageData(0, 0, imgData.imageData.width, imgData.imageData.height); |
| 218 | + return { |
| 219 | + index: imageData.index, |
| 220 | + zoom: imageData.zoom, |
| 221 | + imageData: data |
| 222 | + } |
192 | 223 | } |
193 | 224 | imgData.setState = function setState(state) { |
194 | | - imgData.data = state.data; |
| 225 | + imgData.imgData = state.data |
195 | 226 | imgData.setPixelData(state.data); |
196 | | - imgData.width = state.width; |
197 | | - imgData.height = state.height; |
198 | 227 | imgData.zoom = state.zoom; |
199 | 228 | } |
200 | 229 | imgData.draw = function draw () { |
201 | | - game.tmpctx.putImageData(imgData, 0, 0); |
| 230 | + game.tmpctx.putImageData(imgData.imageData, 0, 0); |
202 | 231 | game.ctx.drawImage(game.imageCanvas[0], 0, 0, imgData.width, imgData.height, 0, 0, imgData.width * imgData.zoom, imgData.height * imgData.zoom); |
203 | 232 | } |
204 | 233 | imageData.__str__ = function __str__() { |
205 | 234 | game.render(imageData) |
206 | 235 | } |
207 | 236 |
|
208 | | - imgData.setPixelData(imageData.data); |
| 237 | + imgData.setPixelData(imgData.imageData); |
209 | 238 | return imgData; |
210 | 239 | } |
211 | 240 |
|
|
0 commit comments