PD: Sorry, even though the result is the same, to make more sense the second sample should read:
var hexaValue:int = 0x9100ff33; var a:int = (hexaValue >> 24) & 0xff; var rgb:int = hexaValue & 0xffffff; var newAlpha:int = 0xcc; copyHexaValue = newAlpha << 24 | rgb; trace(uint(copyHexaValue).toString(16)); // traces cc00ff33 Using rgb as the name of the var that stores the value of the RGB components, instead of arg. 2008/10/6, Juan Pablo Califano <[EMAIL PROTECTED]>: > > Hi, > > If I haven't misread something, this > > a = a >> 1; > > makes no sense. Unless you're trying to divide alpha by 2, in which case I > obviously missed something. > > > If you want to extract the 4 components, you can use something like this: > > > var hexaValue:int = 0x9100ff33; > > var a:int = (hexaValue >> 24) & 0xff; > var r:int = (hexaValue >> 16) & 0xff;; > var g:int = (hexaValue >> 8) & 0xff;; > var b:int = hexaValue & 0xff; > > var newAlpha:int = 0xcc; > var copyHexaValue:int = newAlpha << 24 | r << 16 | g << 8 | b; > trace(uint(copyHexaValue).toString(16)); // traces cc00ff33 > > If you don't bother to get the individual RGB components, just the alpha > channel, try this: > > var hexaValue:int = 0x9100ff33; > var a:int = (hexaValue >> 24) & 0xff; > var arg:int = hexaValue & 0xffffff; > > var newAlpha:int = 0xcc; > copyHexaValue = newAlpha << 24 | arg; > trace(uint(copyHexaValue).toString(16)); // traces cc00ff33 > Also, I'm casting to uint just to display the value in a more > meaningful/readable way in the trace, but as long as you don't perform > arithmetic on those values, you don't have to (because it's parsed as a bit > pattern, not as numerical value, if that makes sense...). > > Cheers > Juan Pablo Califano > > > 2008/10/6, sebastian <[EMAIL PROTECTED]>: >> >> hi Glen, >> >> Kudos for the shift >> 1 operation, knew that was a faster operand. >> >> However, this code is still now working, now it simply doesn't change >> anything... >> :( >> >> var val:uint = getPixel32(x,y); >> var a:uint = (val >> 24) & 0xff; >> var rgb:uint = val & 0xffffff; >> a = a >> 1; >> var newval:uint = (a << 32) | rgb; >> setPixel32(x,y,newval); >> >> I also tried changing it to say: >> >> ... >> var rgb:uint = val & 0x00ffffff; >> a = a >> 1; >> var newval:uint = (a << 24) | rgb; >> ... >> >> since I thought that was an error maybe, but that also doesn't influence >> the alpha of the pixel... >> :( >> >> Out of desperation I also tried: >> >> var a:uint = val & 0xff000000; >> var rgb:uint = val & 0x00fffff; >> a = a >> 1; >> var newval:uint = a | rgb; >> >> and >> >> var a:uint = val & 0xff000000; >> var rgb:uint = val & 0x00fffff; >> a = a >> 1; >> var newval:uint = (a << 24) | rgb; >> >> :( >> >> sniff... >> >> Setting alpha for the whole MC is not an option for what I am doing. I'm >> trying to create trails behind things that are moving by having a video-burn >> like effect; by operating on the pixel level. At the moment I am using code >> from 'Adventures in AS', but once i have it working I'll encapsulate it and >> use it in a different project. >> >> The original source is: >> >> http://flashcoding.blogspot.com/2008/03/small-starfield-with-bluring-effect.html >> >> And my current draft-code modification is: >> >> package >> { >> import flash.events.*; >> import flash.display.*; >> import flash.display.Bitmap; >> import flash.display.BitmapData; >> import flash.geom.Rectangle; >> >> >> public class Starfield >> { >> var mc:MovieClip =new MovieClip(); >> var screendata:BitmapData; >> >> var stars:Array=new Array(); >> var antal:Number=500; >> >> public function Starfield(timeline) >> { >> >> screendata=new >> BitmapData(320,240,false,0x00000000); >> var screen:Bitmap=new Bitmap(screendata); >> mc.addChild(screen); >> >> for (var i:int=0;i<antal;i++) >> { >> InitStar(i); >> } >> >> mc.addEventListener(Event.ENTER_FRAME,this.render); >> timeline.addChild(mc); >> } >> >> private function MoveStar(index:int) >> { >> if (stars[index][0]<-160 || stars[index][0]>160 || >> stars[index][1]<-120 || stars[index][1]>120) >> { >> InitStar(index); >> } >> else >> { >> stars[index][0]= >> stars[index][0]*stars[index][2]; >> stars[index][1]= >> stars[index][1]*stars[index][2]; >> } >> } >> >> private function InitStar(index:int) >> { >> >> stars[index]=[Number(((Math.random()*10)-5)),Number(((Math.random()*10)-5)),Number((Math.random()/10)+1)]; >> } >> >> >> private function render(e:Event):void >> { >> for(var x:int=0;x<320;x++) >> { >> for(var y:int=0;y<240;y++) >> { >> >> var val:uint = >> screendata.getPixel32 (x,y); >> >> var a:uint = (val >> 24) & 0xff; >> var rgb:uint = val & 0xffffff; >> a = a >> 1; >> var newval:uint = (a << 24) | rgb; >> >> screendata.setPixel32(x,y,newval); >> >> } >> } >> >> for(var i:int=0;i<antal;i++) >> { >> MoveStar(i); >> >> screendata.setPixel(stars[i][0]+160,stars[i][1]+120,0xFFFFFF); >> } >> } >> } >> } >> >> >> Regards, >> >> Sebastian. >> >> >> Glen Pike wrote: >> >>> Hi, >>> >>> I think you need to shift by 24 for alpha, you also need to shift then >>> mask the value. RGB is just the bottom three bytes masked and shifting by 1 >>> rather than divide by 2 may be faster, but google for the speed comparisons >>> in AS3 - I think John Grden may have blogged this: >>> var a:uint = (val >> 24) & 0xff; >>> var rgb:uint = val & 0xffffff; >>> a = a >> 1; >>> var newval:uint = (a << 32) | rgb; >>> >>> It would be a good learning exercise to do your own equations for >>> manipulating pixel stuff, but have a look at Mario Klingemann's blog - >>> quasimondo.com - for tips and tricks with images as he is one of the >>> best people at manipulating bitmaps in Flash so he may have some nice >>> examples to stimulate you. For simpler manipulation have a google. Also, >>> if you are just setting the alpha to 50% for the whole bitmap, it may be >>> quicker to do this on the MovieClip because FlashPlayer might be optimising >>> composition somehow, but I understand this may just be an example. >>> >>> HTH >>> >>> Glen >>> sebastian wrote: >>> >>>> Thanks Glen and Andrew, >>>> >>>> Thanks for your fast help, >>>> >>>> Tried to use this code [below] but it makes my pixels yellow instead of >>>> 50% alpha on each pass... any ideas why? >>>> >>>> Is there any good tutorial on working with bit operations and bit logic? >>>> Would make it easier for me to trouble shoot/make my own equations. >>>> :) >>>> >>>> Thanks! >>>> >>>> Seb. >>>> >>>> Andrew Murphy wrote: >>>> >>>>> I'm not sure of this, but: After you grab "val" you could bitshift out >>>>> the >>>>> alpha channel ("a"), subtract that from the original argb value to >>>>> remove >>>>> the alpha channel. Manipulate "a" and bitshift it back up again before >>>>> adding it to the rgb value to give you a new argb. >>>>> >>>>> >>>>> var a:uint = val >> 32 & 0xff; >>>>> var rgb:uint = val - (a << 32); >>>>> a = a / 2; >>>>> var newval:uint = rgb + (a << 32); >>>>> >>>>> >>>>> >>>>> -------------------------------- >>>>> Andrew Murphy >>>>> Interactive Media Specialist >>>>> [EMAIL PROTECTED] >>>>> >>>>> Delvinia >>>>> 214 King Street West, Suite 214 Toronto Canada M5H 3S6 >>>>> >>>>> P 416.364.1455 ext. 232 F 416.364.9830 W www.delvinia.com >>>>> >>>>> CONFIDENTIALITY NOTICE >>>>> This email message may contain privileged or confidential information. >>>>> If >>>>> you are not the intended recipient or received this communication by >>>>> error, >>>>> please notify the sender and delete the message without copying or >>>>> disclosing it. >>>>> >>>>> AVIS DE CONFIDENTIALITÉ >>>>> Ce message peut contenir de l'information légalement privilégiée ou >>>>> confidentielle. Si vous n'êtes pas le destinataire ou croyez avoir reçu >>>>> par >>>>> erreur ce message, nous vous saurions gré d'en aviser l'émetteur et >>>>> d'en >>>>> détruire le contenu sans le communiquer a d'autres ou le reproduire. >>>>> >>>>> >>>>> >>>>>> -----Original Message----- >>>>>> From: [EMAIL PROTECTED] [mailto: >>>>>> [EMAIL PROTECTED] On Behalf Of sebastian >>>>>> Sent: Monday, October 06, 2008 3:18 PM >>>>>> To: Flash Coders List >>>>>> Subject: [Flashcoders] working with getPixel32 and setPixel32, >>>>>> >>>>>> hi folks, >>>>>> >>>>>> can any one shed some light to me on the setpixel32 and getpixel32? >>>>>> >>>>>> I'd like to be able to affect just one of the 4 components: A R G or B >>>>>> independently of another. >>>>>> >>>>>> Essentially, read the current ARGB using getPixel32 and then >>>>>> manipulate just one part of it, in my case, halve the current "A" value >>>>>> of >>>>>> the ARGB and then re-assign it back to the bitmap. >>>>>> >>>>>> >>>>>> //1: grab the HEX value for the current coordinate: >>>>>> var val:uint = getPixel32(x,y); >>>>>> >>>>>> //2: manipulate the HEX value of just 1 of the 4 parts, in my case the >>>>>> A of the ARGB: >>>>>> ???? >>>>>> >>>>>> //3: re-assign it back to the display: >>>>>> setPixel32(x,y,val); >>>>>> >>>>>> Thanks for your help! >>>>>> >>>>>> Sebastian. >>>>>> _______________________________________________ >>>>>> Flashcoders mailing list >>>>>> Flashcoders@chattyfig.figleaf.com >>>>>> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders >>>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> Flashcoders mailing list >>>>> Flashcoders@chattyfig.figleaf.com >>>>> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders >>>>> >>>>> _______________________________________________ >>>> Flashcoders mailing list >>>> Flashcoders@chattyfig.figleaf.com >>>> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders >>>> >>>> >>>> >>> _______________________________________________ >> Flashcoders mailing list >> Flashcoders@chattyfig.figleaf.com >> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders >> > > _______________________________________________ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders