ResLib.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "Common.h"
  2. #include "BFApp.h"
  3. #include "img/PSDReader.h"
  4. #include "gfx/RenderDevice.h"
  5. #include "gfx/Texture.h"
  6. #include "util/PerfTimer.h"
  7. #include "util/TLSingleton.h"
  8. #include "img/JPEGData.h"
  9. #pragma warning(disable:4190)
  10. USING_NS_BF;
  11. static TLSingleton<String> gResLib_TLStrReturn;
  12. BF_EXPORT PSDReader* BF_CALLTYPE Res_OpenPSD(const char* fileName)
  13. {
  14. //gPerfManager->StartRecording();
  15. PSDReader* aPSDReader = new PSDReader();
  16. if (!aPSDReader->Init(fileName))
  17. {
  18. delete aPSDReader;
  19. return NULL;
  20. }
  21. return aPSDReader;
  22. }
  23. BF_EXPORT void BF_CALLTYPE Res_DeletePSDReader(PSDReader* pSDReader)
  24. {
  25. delete pSDReader;
  26. gPerfManager->StopRecording();
  27. gPerfManager->DbgPrint();
  28. }
  29. BF_EXPORT TextureSegment* BF_CALLTYPE Res_PSD_GetLayerTexture(PSDReader* pSDReader, int layerIdx, int* ofsX, int* ofsY)
  30. {
  31. Texture* texture = pSDReader->LoadLayerTexture(layerIdx, ofsX, ofsY);
  32. if (texture == NULL)
  33. return NULL;
  34. TextureSegment* textureSegment = new TextureSegment();
  35. textureSegment->InitFromTexture(texture);
  36. return textureSegment;
  37. }
  38. BF_EXPORT TextureSegment* BF_CALLTYPE Res_PSD_GetMergedLayerTexture(PSDReader* pSDReader, int* layerIndices, int count, int* ofsX, int* ofsY)
  39. {
  40. std::vector<int> aLayerIndices;
  41. aLayerIndices.insert(aLayerIndices.begin(), layerIndices, layerIndices + count);
  42. Texture* texture = pSDReader->LoadMergedLayerTexture(aLayerIndices, ofsX, ofsY);
  43. if (texture == NULL)
  44. return NULL;
  45. TextureSegment* textureSegment = new TextureSegment();
  46. textureSegment->InitFromTexture(texture);
  47. return textureSegment;
  48. }
  49. BF_EXPORT int BF_CALLTYPE Res_PSD_GetLayerCount(PSDReader* pSDReader)
  50. {
  51. return (int) pSDReader->mPSDLayerInfoVector.size();
  52. }
  53. BF_EXPORT PSDLayerInfo* BF_CALLTYPE Res_PSD_GetLayerInfo(PSDReader* pSDReader, int layerIdx)
  54. {
  55. return pSDReader->mPSDLayerInfoVector[layerIdx];
  56. }
  57. BF_EXPORT void BF_CALLTYPE Res_PSDLayer_GetSize(PSDLayerInfo* layerInfo, int* x, int* y, int* width, int* height)
  58. {
  59. *x = layerInfo->mX;
  60. *y = layerInfo->mY;
  61. *width = layerInfo->mWidth;
  62. *height = layerInfo->mHeight;
  63. }
  64. BF_EXPORT int BF_CALLTYPE Res_PSDLayer_GetLayerId(PSDLayerInfo* layerInfo)
  65. {
  66. return layerInfo->mLayerId;
  67. }
  68. BF_EXPORT const char* BF_CALLTYPE Res_PSDLayer_GetName(PSDLayerInfo* layerInfo)
  69. {
  70. return layerInfo->mName.c_str();
  71. }
  72. BF_EXPORT int BF_CALLTYPE Res_PSDLayer_IsVisible(PSDLayerInfo* layerInfo)
  73. {
  74. return layerInfo->mVisible ? 1 : 0;
  75. }
  76. ///
  77. BF_EXPORT StringView BF_CALLTYPE Res_JPEGCompress(uint32* bits, int width, int height, int quality)
  78. {
  79. String& outString = *gResLib_TLStrReturn.Get();
  80. JPEGData jpegData;
  81. jpegData.mBits = bits;
  82. jpegData.mWidth = width;
  83. jpegData.mHeight = height;
  84. jpegData.Compress(quality);
  85. jpegData.mBits = NULL;
  86. outString.Clear();
  87. outString.Insert(0, (char*)jpegData.mSrcData, jpegData.mSrcDataLen);
  88. return outString;
  89. }