0

ユーザーが画像をドラッグアンドドロップするアプリがあり、実行OpenGL可能な処理のために再描画されています。すべてが機能します。ユーザーが自分の画像を保存したい場合は、次のように機能します。

glReadPixels -> NSBitmapImageRep -> NSData -> Write to file

これも機能します。ほとんど。一部の画像では、機能するはずの機能が機能していません。

例えば:

.png

この画像を開いて保存すると: ここに画像の説明を入力

私は得る:
ここに画像の説明を入力

この画像を開いて保存すると、次のようになります。 ここに画像の説明を入力

私は得る:
ここに画像の説明を入力

.jpg

開いて保存すると:
ここに画像の説明を入力

私は得る:
ここに画像の説明を入力

そして、開いて保存すると:
ここに画像の説明を入力

私は得る:
ここに画像の説明を入力

そのため、画像の保存がうまくいかないことがあります。なぜそれが起こっているのですか?


これは私のNSBitmapImageRep割り当て方法です:

NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:_image_width pixelsHigh:_image_height bitsPerSample:8 samplesPerPixel:3 hasAlpha:NO isPlanar:NO colorSpaceName:NSDeviceRGBColorSpace bytesPerRow:3 * _image_width bitsPerPixel:0];

しかもGL_PACK_ALIGNMENT無編集。

4

2 に答える 2

2

ピクセル データを取得する前に、それを「フォーマット」する方法を OpenGL に指示する必要があります。これは、→glPixelStoreのすべての GL_PACK_ パラメータを設定することを意味します。あなたにとって最も重要なのは、配置パラメーターです。また、ピクセルあたりの適切な数のコンポーネントでファイルを書き、OpenGL から適切なコンポーネントを読み取ることにも注意してください。

于 2012-10-09T15:35:55.610 に答える
0

私も同じでした

正しいbytesPerRowをセットアップするだけです

bytesPerRow:(width*3+3)&~3
于 2013-03-23T17:12:24.167 に答える