RoboVM 中的图像

Images in RoboVM

我正在使用 robovm 并想在 UIImage 中显示我远程接收的一些图像。有两种获取图像的方法(由于它们来自其他来源,因此无法更改)。有些以 JPEG 形式发送,有些以 int 数组中的像素形式发送。现在,转换为 UIImage 的 int 图像拒绝像此处那样绘制到图像上下文中,

    NSData imgData = new NSData(array);
    CGDataProvider provider = CGDataProvider.create(imgData);
    CGImage img = CGImage.create((long) size.getWidth(), (long) size.getHeight(),
                8, 32, (long) (size.getWidth()) * 4, CGColorSpace.createDeviceRGB(), new CGBitmapInfo(CGImageAlphaInfo.PremultipliedFirst.value()),
                provider, null, false, CGColorRenderingIntent.Default);
    UIGraphics.beginImageContext(size);
    fullscreen.draw(CGPoint.Zero(), CGBlendMode.Normal, 1.0);
    UIImage uimg = new UIImage(img);
    uimg.draw(new CGRect(rect.x, rect.y, rect.width, rect.height), CGBlendMode.Normal, 1.0);
    fullscreen = UIGraphics.getImageFromCurrentImageContext();
    UIGraphics.endImageContext();

但这样做时它会正确显示:

    NSData imgData = new NSData(array);
    CGDataProvider provider = CGDataProvider.create(imgData);
    CGImage img = CGImage.create((long) size.getWidth(), (long) size.getHeight(),
                8, 32, (long) (size.getWidth()) * 4, CGColorSpace.createDeviceRGB(), new CGBitmapInfo(CGImageAlphaInfo.PremultipliedFirst.value()),
                provider, null, false, CGColorRenderingIntent.Default);
    fullscreen = new UIImage(img);

但是在这种情况下,我无法将图像与 JPEG 一起显示,因为它需要先绘制背景。我该怎么办?

int 数组在转换为 CGImage 之前需要经过这个循环:

    for(int i=0; i<data.length; i++) {
        data[i] = pixels[i] | 0xff000000;
    }

因为默认情况下,alpha(最高字节)为零且图像不可见。