hello glen, it worked fine, thank you. Scaling the bitmaps produces a more discrete animations (i.e., it is not so continuous; the pixel size is incremented in such a way that there is no "small pixels" at the corners), but, for what I have to do, that is not a problem:
http://www.andreithomaz.com/labs/files/pixel/teste2.html []'s andrei On Fri, Mar 7, 2008 at 10:51 AM, Glen Pike <[EMAIL PROTECTED]> wrote: > Hi, > > Would it not be quicker to shrink the source bitmap to a size that > is proportional to the pixelized square size, copy the pixels into a > destination bitmap, then scale the destination back to the original size? > > Not sure if that works, but just a suggestion. > > Glen > > Andrei Thomaz wrote: > > hello list, > > > > I am making some tests to discover if it is possibile to pixelize a > bitmap > > with AS3, with a reasonable speed. I wrote the code below, but it works > only > > with images until 50x50 (in a quadcore). You can see the effect > > http://www.andreithomaz.com/labs/files/pixel/teste1.html. > > > > I would like to ask you for advices about how I could optimize it. Or if > I > > just should try Java/C++. > > > > > > thank you, > > andrei > > > > > > > > public dynamic class Teste1 extends MovieClip { > > > > public var m_mcPicture:MovieClip; > > public var m_sprScreen:Sprite; > > private var m_tmTimer:Timer; > > private var m_nPixel:int; > > private var m_bDirection:Boolean; > > private var m_bmpOriginalImage:BitmapData; > > private var m_aPixels:ByteArray; > > private var m_rcImageArea:Rectangle; > > > > public function Teste1() { > > > > m_rcImageArea = new Rectangle(0, 0, m_mcPicture.width, > > m_mcPicture.height); > > m_nPixel = 1; > > > > m_bmpOriginalImage = new BitmapData( m_mcPicture.width, > > m_mcPicture.height ); > > m_bmpOriginalImage.draw(m_mcPicture); > > m_aPixels = m_bmpOriginalImage.getPixels(m_rcImageArea); > > > > m_mcPicture.visible = false; > > > > m_sprScreen = new Sprite(); > > addChild(m_sprScreen); > > > > m_tmTimer = new Timer(2000); > > m_tmTimer.addEventListener( TimerEvent.TIMER, > _pixelizaImagem ); > > m_tmTimer.start(); > > > > m_bDirection = true; > > } > > > > private function _pixelizaImagem( evt:TimerEvent ):void > > { > > if (m_bDirection) { > > ++m_nPixel; > > if (m_nPixel >= 50) { > > m_bDirection = false; > > } > > } > > else { > > --m_nPixel; > > if (m_nPixel <= 1) { > > m_bDirection = true; > > } > > } > > > > var nRows:int = Math.ceil( (m_mcPicture.height as Number) / > > (m_nPixel as Number) ); > > var nCols:int = Math.ceil( (m_mcPicture.width as Number) / > > (m_nPixel as Number) ); > > var i:int; > > var j:int; > > var k:int = 0; > > var l:int = 0; > > var m:int = 0; > > var r:int, g:int, b:int; > > var offset:int; > > var offset2:int; > > var aPixels:ByteArray = new ByteArray(); > > > > var nPixelsPerPixel; > > var nLimitK:int = m_nPixel; > > var nLimitL:int = m_nPixel; > > > > for (i = 0; i < nRows; i++) { > > if (i == (nRows - 1)) { > > nLimitK = m_bmpOriginalImage.height - (i * > m_nPixel); > > } > > else { > > nLimitK = m_nPixel; > > } > > > > for (j = 0; j < nCols; j++) { > > > > if (j == (nCols - 1)) { > > nLimitL = m_bmpOriginalImage.width - (j * > m_nPixel); > > } > > else { > > nLimitL = m_nPixel; > > } > > > > offset = i * m_bmpOriginalImage.width * m_nPixel; > > offset += (j * m_nPixel); > > > > r = g = b = 0; > > > > for (k = 0; k < nLimitK; k++) { > > offset2 = (offset + (k * > m_bmpOriginalImage.width) ) > > * 4; > > for (l = 0; l < nLimitL; l++) { > > > > r += m_aPixels[ offset2 + 1]; > > g += m_aPixels[ offset2 + 2 ]; > > b += m_aPixels[ offset2 + 3 ]; > > offset2 += 4; > > } > > } > > nPixelsPerPixel = nLimitK * nLimitL; > > r /= nPixelsPerPixel; > > g /= nPixelsPerPixel; > > b /= nPixelsPerPixel; > > > > for (k = 0; k < nLimitK; k++) { > > offset2 = (offset + (k * > m_bmpOriginalImage.width) ) > > * 4; > > for (l = 0; l < nLimitL; l++) { > > > > aPixels[ offset2 ] = 255; > > aPixels[ offset2 + 1 ] = r; > > aPixels[ offset2 + 2 ] = g; > > aPixels[ offset2 + 3 ] = b; > > offset2 += 4; > > } > > } > > > > > > } > > } > > > > var bmpPixelizedImage:BitmapData = new BitmapData( > > m_bmpOriginalImage.width, m_bmpOriginalImage.height); > > bmpPixelizedImage.setPixels(m_rcImageArea, aPixels); > > > > m_sprScreen.graphics.beginBitmapFill(bmpPixelizedImage); > > > > m_sprScreen.graphics.moveTo(0, 0); > > m_sprScreen.graphics.lineTo(bmpPixelizedImage.width, 0); > > m_sprScreen.graphics.lineTo(bmpPixelizedImage.width, > > bmpPixelizedImage.height); > > m_sprScreen.graphics.lineTo(0, bmpPixelizedImage.height); > > m_sprScreen.graphics.lineTo(0, 0); > > m_sprScreen.graphics.endFill(); > > > > } > > > > } > > _______________________________________________ > > Flashcoders mailing list > > [email protected] > > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > > > > > > > > -- > > Glen Pike > 01736 759321 > www.glenpike.co.uk <http://www.glenpike.co.uk> > _______________________________________________ > Flashcoders mailing list > [email protected] > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > _______________________________________________ Flashcoders mailing list [email protected] http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

