0

サンプルあたり 32 ビット、アルファ チャネル (合計でピクセルあたり 128 ビット) を持つ NSBitmapImageRep オブジェクトを作成しようとしています。

私のコードは次のようになります。

let renderSize = NSSize(width: 640, height: 360)
let bitmapRep = NSBitmapImageRep(bitmapDataPlanes: nil, pixelsWide: Int(renderSize.width), pixelsHigh: Int(renderSize.height), bitsPerSample: 32, samplesPerPixel: 4, hasAlpha: true, isPlanar: false, colorSpaceName: NSCalibratedRGBColorSpace, bytesPerRow: 16 * Int(renderSize.width), bitsPerPixel: 128)
println(bitmapRep) //prints "nil"
println(16 * Int(renderSize.width)) //prints 10240
println()

//So what does a 'valid' 32bpc TIFF file with an alpha channel look like?
let imgFile = NSImage(named: "32grad") //http://i.peterwunder.de/32grad.tif
let imgRep = imgFile?.representations[0] as NSBitmapImageRep
println(imgRep.bitsPerSample) //prints 32
println(imgRep.bitsPerPixel) //prints 128
println(imgRep.samplesPerPixel) //prints 4
println(imgRep.bytesPerRow) //prints 10240
println(imgRep.bytesPerRow / Int(imgFile!.size.width)) //prints 16

2 行目を実行すると、コンソールに次のように表示されます。

2014-12-31 04:49:16.639 PixelTestBed[4413:2775703] NSBitmapImageRep を作成するための一貫性のない値のセット

何が起きてる?TIFF 画像とまったく同じ値を持つ NSBitmapImageRep を手動で作成できないのはなぜですか?

ところで、imgur は画像の品質をブッチャーするので、ここに画像をアップロードすることはできません。結局のところ、これはアルファチャンネル付きの 3.7 MB 32bpc TIFF です。

4

1 に答える 1

1

ドキュメントで指定された範囲外の 32 bitsPerSample を割り当てようとしています:

bps

データの 1 つのコンポーネントで 1 つのピクセルを指定するために使用されるビット数。すべてのコンポーネントは、サンプルごとに同じビットを持つと想定されます。bps は、1、2、4、8、12、または 16 のいずれかの値にする必要があります。

NSBitmapImageRep クラス リファレンス

于 2014-12-31T05:50:35.947 に答える