Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 以编程方式创建ICN:“;“不支持的图像大小”;_Macos_Cocoa_Size_Nsimage_Icns - Fatal编程技术网

Macos 以编程方式创建ICN:“;“不支持的图像大小”;

Macos 以编程方式创建ICN:“;“不支持的图像大小”;,macos,cocoa,size,nsimage,icns,Macos,Cocoa,Size,Nsimage,Icns,我正在尝试以编程方式创建ICN(包括1024x1024映像)。目前,我正在创建一个NSImage,然后创建具有适当分辨率的cgmageref对象,最后使用cgmagedestinationaddimage()将它们添加到一个图标中。Peter Hosey已经帮我创建了@2x图像,但是图像的大小不想设置 这是代码(仍然有点凌乱,sourcefile表示图像的路径): 平面=无格式=(尚未加载)CurrentBacking=无(故障) CGImageSource=0x10380ae70“ )| 20

我正在尝试以编程方式创建ICN(包括1024x1024映像)。目前,我正在创建一个
NSImage
,然后创建具有适当分辨率的
cgmageref
对象,最后使用
cgmagedestinationaddimage()
将它们添加到一个图标中。Peter Hosey已经帮我创建了@2x图像,但是图像的大小不想设置

这是代码(仍然有点凌乱,
sourcefile
表示图像的路径):

平面=无格式=(尚未加载)CurrentBacking=无(故障) CGImageSource=0x10380ae70“

)|

2012-12-31 12:48:52.058艾肯[912:680f]|图像0x101b4caf0 大小={512,512}个重复=(

格式=2 CurrentBacking=| CGImageRef:0x101c14630| CGImageSource=0x10380ae70“

)|

2012-12-31 12:48:52.111艾肯[912:680f]|图像0x101b4caf0 大小={256,256}个重复=(

格式=2 CurrentBacking=| CGImageRef:0x101c14630| CGImageSource=0x10380ae70“

)|

2012-12-31 12:48:52.238艾肯[912:680f]|图像0x101b4caf0 大小={256,256}个重复=(

格式=2 CurrentBacking=| CGImageRef:0x101c14630| CGImageSource=0x10380ae70“

)|

2012-12-31 12:48:52.309艾肯[912:680f]|图像0x101b4caf0 大小={128,128}个重复=(

格式=2 CurrentBacking=| CGImageRef:0x101c14630| CGImageSource=0x10380ae70“

)|

2012-12-31 12:48:52.409艾肯[912:680f]|图像0x101b4caf0 大小={128,128}个重复=(

格式=2 CurrentBacking=| CGImageRef:0x101c14630| CGImageSource=0x10380ae70“

)|

2012-12-31 12:48:52.534艾肯[912:680f]| NSImage 0x101b4caf0大小={32, 32}个代表=(

CurrentBacking=| CGImageRef:0x101c14630 | CGImageSource=0x10380ae70“

)|

2012-12-31 12:48:52.616艾肯[912:680f]| NSImage 0x101b4caf0 Size={32, 32}个代表=(

CurrentBacking=| CGImageRef:0x101c14630 | CGImageSource=0x10380ae70“

)|

2012-12-31 12:48:52.729艾肯[912:680f]| NSImage 0x101b4caf0大小={16, 16} 代表=(

CurrentBacking=| CGImageRef:0x101c14630 | CGImageSource=0x10380ae70“

)|

2012-12-31 12:48:52.864艾肯[912:680f]| NSImage 0x101b4caf0大小={16, 16} 代表=(

CurrentBacking=| CGImageRef:0x101c14630 | CGImageSource=0x10380ae70“

)|


错误消息是正确的。您正在放入IconFamily格式不支持的图像大小。具体而言,从您的输出:

2012-12-26 13:48:57.682 Eicon[1131:1b0f]| NSImage 0x1025233b0Size={11.52,11.52}Reps=(“NSBitmapImageRep 0x10421fc30Size={11.52,11.52}色彩空间=(尚未加载)BPS=8 BPP=(尚未加载)像素=1024x1024x102alpha=无平面格式=(尚未加载)CurrentBacking=nil(故障)CGImageSource=0x104221170”

11.52点不是IconFamily中任何元素的有效大小。您需要找出此图像和代表具有该大小的原因

还有几件事:

  • 正如我在另一个答案中告诉您的,您不需要更改表示的像素大小。不要更改像素大小。设置表示和图像的
    大小
    (点大小)(最好设置为有效值)
  • -[NSImage initWithSize:
    文档说明:

    允许通过传递大小(0.0,0.0)来初始化接收器;但是,在使用NSImage对象之前,接收器的大小必须设置为非零值,否则将引发异常

    您没有设置任何一个对象的大小,这是您需要做的。(我很惊讶您没有像文档承诺的那样在这方面遇到异常。)

  • 正如我在你的另一个问题上提到的,已经没有1024点元素了;1024×1024像素元素的正确规格是512点@2x。这是一个
    大小
    (图像和代表)的
    (NSSize){512.0,512.0}
    (点),表示为1024
    pixelsWide
    和1024
    pixelsHigh


    看来我以前少了一种关键成分,给你

    您提供给CGImageDestination的CGImage没有与其关联的点大小,只有NSImages和NSIMAGEREP具有该点大小。CGImage只有一个像素大小;没有指示图像的物理大小或分辨率的内容

    要告诉CGImageDestination给定的CGImage是@1x还是@2x,您需要创建一个字典,给出图像的DPI:

    NSDictionary *imageProps1x = @{
        (__bridge NSString *)kCGImagePropertyDPIWidth: @72.0,
        (__bridge NSString *)kCGImagePropertyDPIHeight: @72.0,
    };
    NSDictionary *imageProps2x = @{
        (__bridge NSString *)kCGImagePropertyDPIWidth: @144.0,
        (__bridge NSString *)kCGImagePropertyDPIHeight: @144.0,
    };
    

    将正确的字典作为最后一个参数传递给
    cgmagedestinationaddimage

    小心使用64×64元素。64×64点在IconFamily中无效;可以有64×64像素,但只能是32@2x。32点到128点之间的大小是48点。不正确,苹果的icns文件有1024^2和64^2,是否有什么原因使您试图在所有不同的表示中设置相同的图像(来源于
    aFile
    )?任何绘制IconFamily的东西都会自动缩放最近的可用元素,因此您可以只添加一次图像的自然大小(如果它是有效的元素大小)或者下一个较小的有效元素大小。因此,我会制作一个
    NSImage
    ,然后重复添加,同时更改其大小?@PeterHosey/Applications/Preview.app/Contents/Resources/Preview.icnsI应该已经更新了代码。即使我没有设置像素大小并且生成的图像大小有效,它仍然会导致错误。我的ima根据你的上一段,ge是正确的。我也不明白的是,相同的图像被添加了10次(导致10个错误),但当我记录图像时,它们都有不同的大小。我尝试只设置
    NSImage
    实例的大小,在中设置
    NSImage
    的大小
    "NSBitmapImageRep 0x10380b900 Size={512, 512} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=1024x1024 Alpha=YES
    
    "NSBitmapImageRep 0x10380b900 Size={512, 512} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=1024x1024 Alpha=YES Planar=NO
    
    "NSBitmapImageRep 0x10380b900 Size={256, 256} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=1024x1024 Alpha=YES Planar=NO
    
    "NSBitmapImageRep 0x10380b900 Size={256, 256} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=1024x1024 Alpha=YES Planar=NO
    
    "NSBitmapImageRep 0x10380b900 Size={128, 128} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=1024x1024 Alpha=YES Planar=NO
    
    "NSBitmapImageRep 0x10380b900 Size={128, 128} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=1024x1024 Alpha=YES Planar=NO
    
    "NSBitmapImageRep 0x10380b900 Size={32, 32} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=1024x1024 Alpha=YES Planar=NO Format=2
    
    "NSBitmapImageRep 0x10380b900 Size={32, 32} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=1024x1024 Alpha=YES Planar=NO Format=2
    
    "NSBitmapImageRep 0x10380b900 Size={16, 16} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=1024x1024 Alpha=YES Planar=NO Format=2
    
    "NSBitmapImageRep 0x10380b900 Size={16, 16} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=1024x1024 Alpha=YES Planar=NO Format=2
    
    NSDictionary *imageProps1x = @{
        (__bridge NSString *)kCGImagePropertyDPIWidth: @72.0,
        (__bridge NSString *)kCGImagePropertyDPIHeight: @72.0,
    };
    NSDictionary *imageProps2x = @{
        (__bridge NSString *)kCGImagePropertyDPIWidth: @144.0,
        (__bridge NSString *)kCGImagePropertyDPIHeight: @144.0,
    };