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

Reply via email to