我在代码中从头开始创建NSImage
。首先,我分配一个字节数组:
pixels = malloc( (int)( size.width * size.height) * 4 * 8 * sizeof(unsigned char));
然后我尝试创建一个测试图像,该图像应该包含从左边的纯黑色到右边的纯红色的渐变:
-(void)generateTestImage{
int idx =0;
for( int i=0; i<(int)(size.height); i++){// Rows
for (int j=0; j<(int) size.width; j++){// Columns
pixels[ idx + 0 ] = 255 * ((float) j / size.width); // r
pixels[ idx + 1 ] = 0; // g
pixels[ idx + 2 ] = 0; // b
pixels[ idx + 3 ] = 255;// a
idx += 4;
}
}
}
最后,我使用:
将字节数组转换为NSImage
-(void) convertPixelsToImage{
if (renderImage == NULL)
renderImage = [[NSImage alloc] initWithSize:size];
else{
NSArray *prevReps = [renderImage representations];
for (id r in prevReps)
[renderImage removeRepresentation:r];
}
NSLog(@"Creating bitmapImageReprsentation with size:%@", NSStringFromSize(size));
NSBitmapImageRep *imgRep =
[[NSBitmapImageRep alloc] initWithBitmapDataPlanes:&pixels
pixelsWide:size.width
pixelsHigh:size.height
bitsPerSample:8
samplesPerPixel:sampPerPix
hasAlpha:true
isPlanar:false
colorSpaceName:NSDeviceRGBColorSpace
bitmapFormat:0
bytesPerRow:0
bitsPerPixel:0];
[renderImage addRepresentation:imgRep];
}
然而,结果图像不是我所期望的。
以下是索引偏移的放大视图
好像我的索引关闭了,因为渐变图案在每一行向左移动了9个像素。
此外,我对图像底部的白色条纹感到困惑......
我花了最后几个小时尝试各种索引方案,而不是解决问题。我已经验证我在整个代码中使用了相同的size
。此外,我已经验证了生成的图像具有正确的尺寸,但其内容已关闭。
此代码是否存在明显问题?关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
请记住,行被四舍五入到某个边界 - 我想的是16像素。