Advertisement
Guest User

Untitled

a guest
Jun 14th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. std::string filePath = std::string([path UTF8String]);
  2. auto player = rlottie::Animation::loadFromFile(filePath);
  3.  
  4. size_t w = 400;
  5. size_t h = 400;
  6.  
  7. auto animationBuffer = std::unique_ptr<uint32_t[]>(new uint32_t[w * h]);
  8. rlottie::Surface surface(animationBuffer.get(), w, h, w * 4);
  9.  
  10. player->renderSync(0, surface);
  11.  
  12. NSMutableData *data = [[NSMutableData alloc] initWithLength:w * (h * 2) * 4 + w * h + w * h * 4];
  13. memset((uint8_t *)data.bytes + w * h * 2 * 4, 255, w * h);
  14.  
  15. vImage_Buffer plainBuffer;
  16. plainBuffer.width = w;
  17. plainBuffer.height = h;
  18. plainBuffer.rowBytes = w;
  19. plainBuffer.data = (uint8_t *)data.bytes + w * h * 2 * 4;
  20.  
  21. vImage_Buffer inputBuffer;
  22. inputBuffer.width = w;
  23. inputBuffer.height = h;
  24. inputBuffer.rowBytes = w * 4;
  25. inputBuffer.data = (uint8_t *)data.bytes;
  26. memcpy(inputBuffer.data, (void *)animationBuffer.get(), w * h * 4);
  27.  
  28. vImage_Buffer alphaSingleBuffer;
  29. alphaSingleBuffer.width = w;
  30. alphaSingleBuffer.height = h;
  31. alphaSingleBuffer.rowBytes = w;
  32. alphaSingleBuffer.data = (uint8_t *)data.bytes + w * h * 2 * 4 + w * h;
  33. vImageExtractChannel_ARGB8888(&inputBuffer, &alphaSingleBuffer, 3, kvImageNoFlags);
  34.  
  35. vImage_Buffer alphaBuffer;
  36. alphaBuffer.width = w;
  37. alphaBuffer.height = h;
  38. alphaBuffer.rowBytes = w * 4;
  39. alphaBuffer.data = (uint8_t *)data.bytes + w * h * 4;
  40.  
  41. vImage_Error err = vImageConvert_Planar8toARGB8888(&alphaSingleBuffer, &alphaSingleBuffer, &alphaSingleBuffer, &plainBuffer, &alphaBuffer, kvImageNoFlags);
  42.  
  43. vImageUnpremultiplyData_RGBA8888(&inputBuffer, &inputBuffer, kvImageNoFlags);
  44. err = vImageOverwriteChannels_ARGB8888(&plainBuffer, &inputBuffer, &inputBuffer, 0x1, kvImageNoFlags);
  45.  
  46. CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
  47. CGImageRef imageRef = CGImageCreate(w, h * 2, 8, 32, w * 4, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst, dataProvider, NULL, false, kCGRenderingIntentDefault);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement