首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇异蜂巢NSBitmapImageRep

奇异蜂巢NSBitmapImageRep
EN

Stack Overflow用户
提问于 2015-09-05 19:17:46
回答 1查看 406关注 0票数 0

我试着塑造形象。一个像素一个像素。首先,我建立了一个类,它可以在每个像素上通过循环绘制不同的颜色。但是,只有当alpha设置为255时,它才能很好地工作。改变阿尔法会使颜色变暗,改变图片。大小和位置都可以。

代码语言:javascript
复制
 var rep:NSBitmapImageRep = NSBitmapImageRep(
                bitmapDataPlanes: nil,
                pixelsWide: width,
                pixelsHigh: height,
                bitsPerSample: 8,
                samplesPerPixel: 4,
                hasAlpha: true,
                isPlanar: false,
                colorSpaceName: NSDeviceRGBColorSpace,
                bytesPerRow: 0,
                bitsPerPixel: 0)!

 for posX in 0-offset...width+offset*2-1 {
      for  posY in  0-offset...height+offset*2-1 {

           var R = Int(Float(posX)/Float(width)*255)
           var G = Int(Float(posY)/Float(height)*255)
           var B = Int(rand() % 256)
           pixel = [R,G,B,alpha]
           rep.setPixel(&pixel, atX: posX, y: posY)
      }
 }

 rep.drawInRect(bounds)

阿尔法设置为255

阿尔法设置为196

这次阿尔法等于127。

和64。

我哪里错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-05 20:31:55

最可能的问题是,您没有将alpha与颜色成分相乘。

来自类引用

Alpha预乘和位图格式 当使用预乘格式创建位图时,如果存在覆盖(alpha)平面,则位图的颜色分量将与其进行预乘。在这种情况下,如果您修改位图的内容,那么您将负责对数据进行预乘。注意,预乘对产出质量的影响一般可以忽略不计。对于浮点图像数据,预乘颜色分量是一种无损运算,而对于定点图像数据,预乘可以带来较小的舍入误差。在这两种情况下,在合成许多预相乘图像时可能会出现更多的舍入错误;然而,这种错误通常是不可见的。 因此,如果要操作图像数据,则不应使用NSBitmapImageRep对象。若要处理未乘以的数据,请使用Core框架。(具体来说,使用CGImageCreate函数和kCGImageAlphaLast参数创建图像。)或者,在创建位图时包括NSAlphaNonpremultipliedBitmapFormat标志。 Note 使用bitmapFormat参数对initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel:方法指定创建位图的格式。使用其他方法创建或检索位图时,位图格式取决于图像数据的原始源。在处理图像数据之前检查bitmapFormat属性。

您使用了不带-init...参数的bitmapFormat方法。在这种情况下,您需要查询结果对象的bitmapFormat,并确保构建像素值以匹配该格式。请注意,该格式指示alpha以组件顺序出现的位置,颜色组件是否被alpha乘以,以及组件是浮点还是整数。

您可以切换到使用具有-init...参数的bitmapFormat方法,并将NSAlphaNonpremultipliedBitmapFormat与您选择的其他标志(第一个或最后一个、整数或浮点数、endianness)混合起来。但是,请注意,并非所有可能的格式都支持绘图。

顺便提一下,我强烈建议阅读关于NSImageNSBitmapImageRep10.6 AppKit发行说明中的部分。搜索"NSImage、CGImage和CoreGraphics阻抗匹配“,然后开始阅读"NSBitmapImageRep: CoreGraphics阻抗匹配和性能说明”一节,这是这里最相关的部分。特别是最后一节,有关于直接处理像素的重要信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32416828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档