Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- std::string filePath = std::string([path UTF8String]);
- auto player = rlottie::Animation::loadFromFile(filePath);
- size_t w = 400;
- size_t h = 400;
- auto animationBuffer = std::unique_ptr<uint32_t[]>(new uint32_t[w * h]);
- rlottie::Surface surface(animationBuffer.get(), w, h, w * 4);
- player->renderSync(0, surface);
- NSMutableData *data = [[NSMutableData alloc] initWithLength:w * (h * 2) * 4 + w * h + w * h * 4];
- memset((uint8_t *)data.bytes + w * h * 2 * 4, 255, w * h);
- vImage_Buffer plainBuffer;
- plainBuffer.width = w;
- plainBuffer.height = h;
- plainBuffer.rowBytes = w;
- plainBuffer.data = (uint8_t *)data.bytes + w * h * 2 * 4;
- vImage_Buffer inputBuffer;
- inputBuffer.width = w;
- inputBuffer.height = h;
- inputBuffer.rowBytes = w * 4;
- inputBuffer.data = (uint8_t *)data.bytes;
- memcpy(inputBuffer.data, (void *)animationBuffer.get(), w * h * 4);
- vImage_Buffer alphaSingleBuffer;
- alphaSingleBuffer.width = w;
- alphaSingleBuffer.height = h;
- alphaSingleBuffer.rowBytes = w;
- alphaSingleBuffer.data = (uint8_t *)data.bytes + w * h * 2 * 4 + w * h;
- vImageExtractChannel_ARGB8888(&inputBuffer, &alphaSingleBuffer, 3, kvImageNoFlags);
- vImage_Buffer alphaBuffer;
- alphaBuffer.width = w;
- alphaBuffer.height = h;
- alphaBuffer.rowBytes = w * 4;
- alphaBuffer.data = (uint8_t *)data.bytes + w * h * 4;
- vImage_Error err = vImageConvert_Planar8toARGB8888(&alphaSingleBuffer, &alphaSingleBuffer, &alphaSingleBuffer, &plainBuffer, &alphaBuffer, kvImageNoFlags);
- vImageUnpremultiplyData_RGBA8888(&inputBuffer, &inputBuffer, kvImageNoFlags);
- err = vImageOverwriteChannels_ARGB8888(&plainBuffer, &inputBuffer, &inputBuffer, 0x1, kvImageNoFlags);
- CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
- 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