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(最高字节)为零且图像不可见。
我正在使用 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(最高字节)为零且图像不可见。