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); } } } }