Cocoa NSBitmapImageRep数据格式是否为应用程序图标图像?

Cocoa NSBitmapImageRep数据格式是否为应用程序图标图像?,cocoa,macos,Cocoa,Macos,我有一个在RGBA中的char*数据数组,然后移动到ARGB 底线是,设置的应用程序图像看起来完全乱七八糟,我无法找出原因 //create a bitmap representation of the image data. //The data is expected to be unsigned char** NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithBitmapDataPla

我有一个在RGBA中的char*数据数组,然后移动到ARGB

底线是,设置的应用程序图像看起来完全乱七八糟,我无法找出原因

    //create a bitmap representation of the image data.
   //The data is expected to be unsigned char**
   NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc]
       initWithBitmapDataPlanes : (unsigned char**) &dest
       pixelsWide:width pixelsHigh:height
       bitsPerSample:8
       samplesPerPixel:4
       hasAlpha:YES
       isPlanar:NO
       colorSpaceName:NSDeviceRGBColorSpace
       bitmapFormat: NSAlphaFirstBitmapFormat
       bytesPerRow: bytesPerRow
       bitsPerPixel:32 ];

   //allocate the image
   NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize(width, height)];
   [image addRepresentation:bitmap];


   if( image == NULL) {
       printf("image is null\n");
       fflush(stdout);
   }

   //set the icon image of the application
   [NSApp setApplicationIconImage :image];

   //tell the image to autorelease when done
   [image autorelease];
这些价值观中有什么是不正确的?图像看起来非常多色和像素化,还有透明的部分/线条

编辑:将每行字节数更改为宽度*4(扫描线)后,这就是我得到的图像。 ![备选案文][1]

原始图像只是一个橙色正方形

EDIT2:更新图像和一些参数

谢谢


只有当您同时为数据传递NULL(从而让代表自己分配数据)时,为bytesPerRow指定0才有用。如果超过零,则要求系统使用“最佳”bytesPerRow,这在体系结构和操作系统版本之间是不稳定的。它不是width*bitsPerPixel,它是为对齐而填充的


至少这是一个错误。

我添加了一个编辑以包含您的更改,结果已发布,谢谢!差不多了。呃,比特像素也有32个。如果您正在传递数据,那么数据的格式已经确定,因此您不应该让框架选择任何内容。除此之外,我想我想知道数据是否真的是以您传递给位图的格式。你可能需要附上一个完整的示例应用程序,让人们看到。我希望我可以。。。我也加了这个,看起来差不多一样。。。我知道数据是正确的,因为我在windows上使用它。这是字符**但是,不签名会让事情变得奇怪吗?我认为不应该。感谢您的建议您应该始终能够制作一个示例应用程序。我不是建议您发布源代码,只是制作一个显示问题的独立应用程序。您在windows上使用它并不意味着您要传递给NSBitmapImageRep的格式就是该格式。例如,它是真的ARGB,还是BGRA。ARGB到NSBitmapImageRep表示逐字节检查时,第一个字节是A、第二个R、第三个G、第四个B。不要忘记释放或自动释放图像代表。