cp_palette_util.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import * as cc from "cc";
  2. export default class cp_palette_util {
  3. public static get_rgba_arr(h: number, s: number, l: number, a: number = 255) {
  4. let color = new cc.Color().fromHSV(h, s, l);
  5. let r = color.r;
  6. let g = color.g;
  7. let b = color.b;
  8. // let a = color.a;
  9. return [r, g, b, a];
  10. }
  11. public static get_rgba(color: cc.Color) {
  12. let r = color.r;
  13. let g = color.g;
  14. let b = color.b;
  15. let a = color.a;
  16. return { r, g, b, a };
  17. }
  18. public static get_rgba_arr_by_color(color: cc.Color) {
  19. let r = color.r;
  20. let g = color.g;
  21. let b = color.b;
  22. let a = color.a;
  23. return [r, g, b, a];
  24. }
  25. public static unit8array_to_texture2d(arr: Uint8Array, width: number, height: number): cc.Texture2D {
  26. let tex = new cc.Texture2D();
  27. const image = new cc.ImageAsset({
  28. _data: arr,
  29. _compressed: false,
  30. width: width,
  31. height: height,
  32. format: cc.Texture2D.PixelFormat.RGBA8888,
  33. });
  34. const texture = new cc.Texture2D();
  35. texture.setFilters(cc.Texture2D.Filter.NEAREST, cc.Texture2D.Filter.NEAREST);
  36. texture.image = image;
  37. return texture;
  38. }
  39. public static grid_to_texture2d(
  40. grid: Array<Array<number>>,
  41. width: number, height: number,
  42. ): cc.Texture2D {
  43. // let arr = grid.reduce((a, b) => { return a.concat(b); });
  44. let data = null;
  45. data = new Uint8Array(grid.length * 4);
  46. let index = 0;
  47. let obj = grid[index];
  48. let count = 0;
  49. for (let i = 0; i < data.length; i += 4) {
  50. obj = grid[i / 4];
  51. data[i] = obj[0];
  52. data[i + 1] = obj[1];
  53. data[i + 2] = obj[2];
  54. data[i + 3] = obj[3];
  55. }
  56. let tex = this.unit8array_to_texture2d(data, width, height);
  57. // console.timeEnd("2d")
  58. return tex;
  59. }
  60. /**
  61. * 网格RGBA数组转Texture2D
  62. * @param grid
  63. * @param size
  64. * @returns
  65. */
  66. public static grid2SpriteFrame(grid: Array<Array<number>>, width: number, height: number): cc.SpriteFrame {
  67. //反转y轴,因为图片是从左下角作为其实坐标
  68. grid.reverse();
  69. let arr = [];
  70. for (let y = 0; y < grid.length; y++) {
  71. arr.push(...grid[y]);
  72. }
  73. const sp = new cc.SpriteFrame();
  74. sp.texture = this.grid_to_texture2d(arr, width, height);
  75. sp.packable = false;
  76. return sp;
  77. }
  78. }