ImageCJ.as 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. package com.imt.intimamedia.helpers
  2. {
  3. import flash.display.Bitmap;
  4. import flash.display.BitmapData;
  5. import flash.geom.Matrix;
  6. import flash.utils.ByteArray;
  7. import mx.controls.Alert;
  8. // Added by Jdeppe march 2012
  9. // CJ suffix because first coder of Scale object (IMT V1) was Christophe Jacquelin
  10. // IMT Paris Opera district
  11. public class ImageCJ
  12. {
  13. private var image:Bitmap;
  14. public var dimh:int; // Dimension Horizontal
  15. public var dimv:int; // Dimension Vertical
  16. private var init:int; // Image initialized
  17. private var itype:int; // Type of the pixel date
  18. private var nbpix:int; // Nb of pixels of the image
  19. private var m_seed1:int;
  20. private var m_seed2:int;
  21. public var m_isBlack:Boolean = true; // Fond noir
  22. public var data:BitmapData = null;
  23. public function setBitmapData(vData:BitmapData):void
  24. {
  25. this.data = vData.clone();
  26. dimh = this.data.width;
  27. dimv = this.data.height
  28. nbpix = dimh * dimv;
  29. this.image = new Bitmap(this.data);
  30. }
  31. public function create(dh:int, dv:int):void
  32. {
  33. if (m_isBlack == true)
  34. {
  35. data = new BitmapData(dh, dv, false, 0x000000);
  36. }
  37. else
  38. {
  39. data = new BitmapData(dh, dv, false, 0xFFFFFF);
  40. }
  41. dimh = dh;
  42. dimv = dv;
  43. nbpix = dimh * dimv;
  44. this.image = new Bitmap(this.data);
  45. }
  46. private function clean():void
  47. {
  48. var x:int;
  49. var y:int;
  50. var col:int;
  51. for (x = 0; x < dimh; x++)
  52. {
  53. for (y = 0; y < dimv; y++)
  54. {
  55. col = data.getPixel(x, y);
  56. data.setPixel(x, dimv-y, col);
  57. }
  58. }
  59. }
  60. private function setByteArray(ba :ByteArray):void
  61. {
  62. var x:int;
  63. var y:int;
  64. var col:uint;
  65. var red:uint;
  66. var green:uint;
  67. var blue:uint;
  68. for (y = 0; y < 1; y++)
  69. {
  70. for (x = 0; x < 10; x++)
  71. {
  72. blue = ba.readByte();
  73. red = ba.readByte();
  74. green = ba.readByte();
  75. col = 0x000000 && blue;
  76. col = col && (red >> 16);
  77. col = col && (green >> 8);
  78. data.setPixel(x, y, 0xFFFFFF);
  79. }
  80. }
  81. }
  82. private function getran():Number
  83. {
  84. var k:int;
  85. var l:int;
  86. var iz:int;
  87. var res:Number;
  88. k = m_seed1 % 53668;
  89. l = (m_seed1 - k) / 53668;
  90. m_seed1 = 40014 * k - l * 12211;
  91. if (m_seed1 < 0) m_seed1 = m_seed1 + 2147483563;
  92. k = m_seed2 % 52774;
  93. l = (m_seed2 - k) / 52774;
  94. m_seed2 = 40692 * k - l * 3791;
  95. if (m_seed2 < 0) m_seed2 = m_seed2 + 2147483399;
  96. iz = m_seed1 - m_seed2;
  97. if (iz < 1) iz = iz + 2147483562;
  98. res = iz * 4.656613e-10;
  99. if (res < 0.0) res = 0.0;
  100. if (res > 1.0) res = 1.0;
  101. return res;
  102. }
  103. private function makeByteArray():ByteArray
  104. {
  105. var ba :ByteArray = new ByteArray();
  106. ba.endian = "bigEndian";
  107. var x:int;
  108. var y:int;
  109. var col:uint;
  110. var red:uint;
  111. var green:uint;
  112. var blue:uint;
  113. for (y = 0; y < dimh; y++)
  114. {
  115. for (x = 0; x < dimv; x++)
  116. {
  117. col = data.getPixel32(x, y);
  118. red = col >> 16 & 0xFF;
  119. green = col >> 8 & 0xFF;
  120. blue = col & 0xFF;
  121. ba.writeByte(blue ^7);
  122. ba.writeByte(red^7);
  123. ba.writeByte(green^7);
  124. }
  125. }
  126. return ba;
  127. }
  128. public function resize(w:int, h:int, maxWidth:int, maxHeight:int, pixels:BitmapData):void
  129. {
  130. var scaleFactor:Number;
  131. var newWidth:Number = maxWidth;
  132. var newHeight:Number = maxHeight;
  133. if (w > h)
  134. {
  135. scaleFactor = maxWidth / w;
  136. }
  137. else
  138. {
  139. scaleFactor = maxHeight / h;
  140. }
  141. newWidth = w * scaleFactor;
  142. newHeight = h * scaleFactor;
  143. var scaledBitmapData:BitmapData = new BitmapData(newWidth, newHeight);
  144. var scaleMatrix:Matrix = new Matrix();
  145. // scaleMatrix.scale(scaleFactor, scaleFactor);
  146. // CJ 280116 : Chagt Instruction
  147. scaleMatrix.scale(newWidth / w, newHeight / h);
  148. scaledBitmapData.draw(pixels, scaleMatrix, null, null, null, false);
  149. data = scaledBitmapData;
  150. }
  151. public function resize2(w:int, h:int, maxWidth:int, maxHeight:int, pixels:BitmapData):void
  152. {
  153. var scaleFactor:Number;
  154. var newWidth:int = maxWidth;
  155. var newHeight:int = maxHeight;
  156. var x : int;
  157. var y : int;
  158. var value : uint;
  159. if (w > h)
  160. {
  161. scaleFactor = maxWidth / w;
  162. }
  163. else
  164. {
  165. scaleFactor = maxHeight / h;
  166. }
  167. newWidth = int(Number(w) * scaleFactor);
  168. newHeight = int(Number(h) * scaleFactor);
  169. var scaleMatrix:Matrix = new Matrix();
  170. var scaledBitmapData:BitmapData = new BitmapData(newWidth, newHeight);
  171. create(newWidth, newHeight);
  172. // scaleMatrix.scale(scaleFactor, scaleFactor);
  173. // CJ 280116 : Chagt Instruction
  174. scaleMatrix.scale(newWidth / w, newHeight / h);
  175. scaledBitmapData.draw(pixels, scaleMatrix, null, null, null, false);
  176. for (x = 0; x < newWidth; x++)
  177. {
  178. for (y = 0; y < newHeight; y++)
  179. {
  180. value = scaledBitmapData.getPixel32(x, y);
  181. data.setPixel32(x, y, value);
  182. }
  183. }
  184. dimh = newWidth;
  185. dimv = newHeight;
  186. }
  187. // Transforme l'image en une image au ratio dimh / dimv = 4/3
  188. public function toQuatreTiers(dimh:int, dimv:int, pixels:BitmapData):void
  189. {
  190. var ratio : Number;
  191. var oridimh : int;
  192. var oridimv : int;
  193. var newdimh : int;
  194. var newdimv : int;
  195. var x : int;
  196. var y : int;
  197. var value : uint;
  198. oridimh = dimh;
  199. oridimv = dimv;
  200. ratio = Number(oridimh) / Number(oridimv);
  201. if (ratio <= (4.0 / 3.0))
  202. {
  203. newdimv = oridimv;
  204. newdimh = int((4.0 * oridimv) / 3.0);
  205. }
  206. else
  207. {
  208. newdimh = oridimh;
  209. newdimv = int ((3.0 * oridimh) / 4.0);
  210. }
  211. // Alert.show("ratio = " + ratio.toString() + "newdimh = " + newdimh.toString() + "newdimv = " + newdimv.toString() + "oridimh = " + oridimh.toString() + "oridimv = " + oridimv.toString());
  212. // Transfert de l'image d'origine vers la nouvelle image
  213. create(newdimh, newdimv);
  214. if (newdimv >= oridimv)
  215. {
  216. // Alert.show("newdimv > oridimv" + "; newdimv = "+newdimv.toString() + "; oridimv = "+oridimv.toString() );
  217. // ------------
  218. //
  219. // ------------
  220. // xxxxxxxxxxxx
  221. // ------------
  222. //
  223. // ------------
  224. for (x = 0; x < oridimh; x++)
  225. {
  226. for (y = 0; y < oridimv; y++)
  227. {
  228. value = pixels.getPixel32(x, y);
  229. data.setPixel32(x + ((newdimh - oridimh) / 2), y + ((newdimv - oridimv) / 2), value);
  230. }
  231. }
  232. }
  233. else if (newdimh >= oridimh)
  234. {
  235. // | | x | |
  236. // | | x | |
  237. // | | x | |
  238. // | | x | |
  239. // | | x | |
  240. // | | x | |
  241. // Alert.show("newdimv > dimv" + "; newdimh = "+newdimh.toString() + "; oridimh = "+oridimv.toString() );
  242. for (x = 0; x < oridimh; x++)
  243. {
  244. for (y = 0; y < oridimv; y++)
  245. {
  246. value = pixels.getPixel32(x, y);
  247. data.setPixel32(x + ((newdimh - oridimh) / 2), y + ((newdimv - oridimv) / 2), value);
  248. }
  249. }
  250. }
  251. if( ( newdimh != 768 && newdimv != 576 ))
  252. {
  253. resize2( newdimh, newdimv, 768, 576, data);
  254. }
  255. }
  256. }
  257. }