【发布时间】:2014-03-22 16:44:23
【问题描述】:
我喜欢在 UIImageView 中显示 .cpbitmap(它的文件格式 iOS 保存壁纸)。问题是我需要转换它。我已经弄清楚如果你得到它的数据(NSData)并转换你得到UIColor的每一位,所以第一个位是R,然后是B,然后是G,然后是Alpha(我认为)。现在我需要从信息中“绘制”一个 UIImage 。有人知道怎么做吗?
这里是 .cpbitmap 文件的链接:https://www.dropbox.com/s/s9v4lahixm9cuql/LockBackground.cpbitmap
如果有人可以帮助我,那就太好了,
谢谢
编辑 我找到了一个可以工作的 python 脚本,有人能把它翻译成 Objective
#!/usr/bin/python
from PIL import Image,ImageOps
import struct
import sys
if len(sys.argv) < 3:
print "Need two args: filename and result_filename\n";
sys.exit(0)
filename = sys.argv[1]
result_filename = sys.argv[2]
with open(filename) as f:
contents = f.read()
unk1, width, height, unk2, unk3, unk4 = struct.unpack('<6i', contents[-24:])
im = Image.fromstring('RGBA', (width,height), contents, 'raw', 'RGBA', 0, 1)
r,g,b,a = im.split()
im = Image.merge('RGBA', (b,g,r,a))
im.save(result_filename)
【问题讨论】:
-
你如何识别图像的分辨率?是预定义的吗?
-
你是指身高和搭配吗?它的高度和设备的高度相同。
-
我首先被非标准的图像尺寸所迷惑,但我猜是因为
UIMotionEffect渲染的视差效果,尺寸会比物理设备尺寸大(所以作为图像变化,有东西要显示)。凭经验发现大小为 744x1392,我注意到在文件末尾,我可以看到编码在其中的那些尺寸,0x2E8(744) 和0x570(1392)。我不确定您将如何以编程方式提取该数据。 (这不是NSKeyedArchiver,我通常将其与bplist联系起来。)
标签: objective-c bitmap uiimage