| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- package com.imt.intimamedia.helpers
- {
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.geom.Matrix;
- import flash.utils.ByteArray;
-
- import mx.controls.Alert;
-
- // Added by Jdeppe march 2012
- // CJ suffix because first coder of Scale object (IMT V1) was Christophe Jacquelin
- // IMT Paris Opera district
- public class ImageCJ
- {
- private var image:Bitmap;
- public var dimh:int; // Dimension Horizontal
- public var dimv:int; // Dimension Vertical
-
- private var init:int; // Image initialized
- private var itype:int; // Type of the pixel date
-
- private var nbpix:int; // Nb of pixels of the image
- private var m_seed1:int;
- private var m_seed2:int;
- public var m_isBlack:Boolean = true; // Fond noir
-
- public var data:BitmapData = null;
-
- public function setBitmapData(vData:BitmapData):void
- {
- this.data = vData.clone();
-
- dimh = this.data.width;
- dimv = this.data.height
- nbpix = dimh * dimv;
-
- this.image = new Bitmap(this.data);
- }
-
- public function create(dh:int, dv:int):void
- {
- if (m_isBlack == true)
- {
- data = new BitmapData(dh, dv, false, 0x000000);
- }
- else
- {
- data = new BitmapData(dh, dv, false, 0xFFFFFF);
- }
-
- dimh = dh;
- dimv = dv;
- nbpix = dimh * dimv;
-
- this.image = new Bitmap(this.data);
- }
-
- private function clean():void
- {
- var x:int;
- var y:int;
- var col:int;
-
- for (x = 0; x < dimh; x++)
- {
- for (y = 0; y < dimv; y++)
- {
- col = data.getPixel(x, y);
- data.setPixel(x, dimv-y, col);
- }
- }
- }
-
- private function setByteArray(ba :ByteArray):void
- {
- var x:int;
- var y:int;
- var col:uint;
- var red:uint;
- var green:uint;
- var blue:uint;
-
- for (y = 0; y < 1; y++)
- {
- for (x = 0; x < 10; x++)
- {
- blue = ba.readByte();
- red = ba.readByte();
- green = ba.readByte();
- col = 0x000000 && blue;
- col = col && (red >> 16);
- col = col && (green >> 8);
-
- data.setPixel(x, y, 0xFFFFFF);
- }
- }
- }
-
- private function getran():Number
- {
- var k:int;
- var l:int;
- var iz:int;
- var res:Number;
-
- k = m_seed1 % 53668;
- l = (m_seed1 - k) / 53668;
- m_seed1 = 40014 * k - l * 12211;
- if (m_seed1 < 0) m_seed1 = m_seed1 + 2147483563;
- k = m_seed2 % 52774;
- l = (m_seed2 - k) / 52774;
- m_seed2 = 40692 * k - l * 3791;
- if (m_seed2 < 0) m_seed2 = m_seed2 + 2147483399;
- iz = m_seed1 - m_seed2;
- if (iz < 1) iz = iz + 2147483562;
- res = iz * 4.656613e-10;
-
- if (res < 0.0) res = 0.0;
- if (res > 1.0) res = 1.0;
-
- return res;
- }
-
- private function makeByteArray():ByteArray
- {
- var ba :ByteArray = new ByteArray();
- ba.endian = "bigEndian";
- var x:int;
- var y:int;
- var col:uint;
- var red:uint;
- var green:uint;
- var blue:uint;
-
- for (y = 0; y < dimh; y++)
- {
- for (x = 0; x < dimv; x++)
- {
- col = data.getPixel32(x, y);
- red = col >> 16 & 0xFF;
- green = col >> 8 & 0xFF;
- blue = col & 0xFF;
-
- ba.writeByte(blue ^7);
- ba.writeByte(red^7);
- ba.writeByte(green^7);
- }
- }
- return ba;
- }
-
- public function resize(w:int, h:int, maxWidth:int, maxHeight:int, pixels:BitmapData):void
- {
- var scaleFactor:Number;
- var newWidth:Number = maxWidth;
- var newHeight:Number = maxHeight;
-
- if (w > h)
- {
- scaleFactor = maxWidth / w;
- }
- else
- {
- scaleFactor = maxHeight / h;
- }
-
- newWidth = w * scaleFactor;
- newHeight = h * scaleFactor;
-
- var scaledBitmapData:BitmapData = new BitmapData(newWidth, newHeight);
- var scaleMatrix:Matrix = new Matrix();
- // scaleMatrix.scale(scaleFactor, scaleFactor);
- // CJ 280116 : Chagt Instruction
- scaleMatrix.scale(newWidth / w, newHeight / h);
-
- scaledBitmapData.draw(pixels, scaleMatrix, null, null, null, false);
- data = scaledBitmapData;
- }
- public function resize2(w:int, h:int, maxWidth:int, maxHeight:int, pixels:BitmapData):void
- {
- var scaleFactor:Number;
- var newWidth:int = maxWidth;
- var newHeight:int = maxHeight;
- var x : int;
- var y : int;
- var value : uint;
-
- if (w > h)
- {
- scaleFactor = maxWidth / w;
- }
- else
- {
- scaleFactor = maxHeight / h;
- }
-
- newWidth = int(Number(w) * scaleFactor);
- newHeight = int(Number(h) * scaleFactor);
-
- var scaleMatrix:Matrix = new Matrix();
- var scaledBitmapData:BitmapData = new BitmapData(newWidth, newHeight);
-
- create(newWidth, newHeight);
-
- // scaleMatrix.scale(scaleFactor, scaleFactor);
- // CJ 280116 : Chagt Instruction
- scaleMatrix.scale(newWidth / w, newHeight / h);
-
- scaledBitmapData.draw(pixels, scaleMatrix, null, null, null, false);
- for (x = 0; x < newWidth; x++)
- {
- for (y = 0; y < newHeight; y++)
- {
- value = scaledBitmapData.getPixel32(x, y);
- data.setPixel32(x, y, value);
- }
- }
- dimh = newWidth;
- dimv = newHeight;
- }
- // Transforme l'image en une image au ratio dimh / dimv = 4/3
- public function toQuatreTiers(dimh:int, dimv:int, pixels:BitmapData):void
- {
- var ratio : Number;
- var oridimh : int;
- var oridimv : int;
- var newdimh : int;
- var newdimv : int;
- var x : int;
- var y : int;
- var value : uint;
-
- oridimh = dimh;
- oridimv = dimv;
-
- ratio = Number(oridimh) / Number(oridimv);
-
- if (ratio <= (4.0 / 3.0))
- {
- newdimv = oridimv;
- newdimh = int((4.0 * oridimv) / 3.0);
- }
- else
- {
- newdimh = oridimh;
- newdimv = int ((3.0 * oridimh) / 4.0);
- }
-
- // Alert.show("ratio = " + ratio.toString() + "newdimh = " + newdimh.toString() + "newdimv = " + newdimv.toString() + "oridimh = " + oridimh.toString() + "oridimv = " + oridimv.toString());
- // Transfert de l'image d'origine vers la nouvelle image
- create(newdimh, newdimv);
-
- if (newdimv >= oridimv)
- {
- // Alert.show("newdimv > oridimv" + "; newdimv = "+newdimv.toString() + "; oridimv = "+oridimv.toString() );
- // ------------
- //
- // ------------
- // xxxxxxxxxxxx
- // ------------
- //
- // ------------
- for (x = 0; x < oridimh; x++)
- {
- for (y = 0; y < oridimv; y++)
- {
- value = pixels.getPixel32(x, y);
- data.setPixel32(x + ((newdimh - oridimh) / 2), y + ((newdimv - oridimv) / 2), value);
- }
- }
- }
- else if (newdimh >= oridimh)
- {
- // | | x | |
- // | | x | |
- // | | x | |
- // | | x | |
- // | | x | |
- // | | x | |
- // Alert.show("newdimv > dimv" + "; newdimh = "+newdimh.toString() + "; oridimh = "+oridimv.toString() );
- for (x = 0; x < oridimh; x++)
- {
- for (y = 0; y < oridimv; y++)
- {
- value = pixels.getPixel32(x, y);
- data.setPixel32(x + ((newdimh - oridimh) / 2), y + ((newdimv - oridimv) / 2), value);
- }
- }
- }
-
- if( ( newdimh != 768 && newdimv != 576 ))
- {
- resize2( newdimh, newdimv, 768, 576, data);
- }
- }
- }
- }
|