2012-03-07 17 views
2

libpng & png ++を画像のバイキュービックサイズ変更に適用する方法を説明するチュートリアルを教えてもらえますか?私は何かを探して3時間ほど過ごしましたが、見つけられません。おそらく私はどこを見なければならないか分からないからです。libpngを使用して画像のサイズを変更(双三方)

画像(48 bit image)はlibpngで読み込まれ、次にQImageに読み込まれて出力されます。イメージにQImage::scaledを使用すると、ピクセル情報が失われ、イメージは必要なものに対して役に立たなくなります。

I読み取りおよびPNGの画像を操作:: rgba_pixel_16ピクセル - このようにそれを読んで:コンポーネント形式当たりない16ビットが存在しない

png::image<png::rgba_pixel_16> myImage(myFile.toAscii());

別の答えを引用QImage。あなたが得ることができるのはQImage :: Format_ARGB32です。コンポーネントあたり8ビットです。たとえ8ビットインデックスモードを使用しても、カラーテーブルはコンポーネントごとに8ビット以上をサポートしません。さらに、QImageIOHandlerクラスはQImageの観点から動作するため、残念ながら、カラーコンポーネントあたり16ビットで動作するカスタムイメージフォーマットプラグインを作成することはできません。

最後の引用は、私がこれにQImageを使用できない理由を説明しています。

答えて

0

なぜlibpngが必要ですか?配列のイメージを読み込んでからサイズを変更することができます。イメージを読み込んだ後にlibpngは必要ありません。

+0

png :: rgba_pixel_16ピクセルの画像を読み込んで操作します。これは次のようになります。png :: image myImage(myFile.toAscii());これは私に必要な品質を与えてくれます(私は64ビットと思っていますが、確かではありませんが、結果は大丈夫ですが大きすぎます)。 – arieltools

1

プログラムでイメージのサイズを変更したいだけなら、 imagemagickをご覧ください。

+0

ありがとうございますが、QTを使用する必要があります。 – arieltools

+0

Qtは48bppイメージをサポートしていません。ドキュメンテーションを一見した後のAFAICT libpngはスケーリングを行うことができません。あなたが「これにQtを使う必要がある」ということは、どういう意味ですか? Qtを使ってimagemagickを呼んでください:-) – 6502

1

Qtでlibpngは必要ありません。

ただ、バイリニアスケーリングをtransformMode = Qt::SmoothTransformation

QImage QImage::scaled (const QSize & size, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode) const 

を使用しています。

+0

私は知っていますが、私はこれを既に試しましたが、何らかの理由で期待通りの結果を得られませんでした。私はそれがビット深度でなければならないと思う。 – arieltools

+0

正確に問題は何でしたか?これについての質問を開くことは興味深いかもしれません。 – Koying

+0

イメージ(48ビットイメージ)はlibpngで読み込まれ、出力のために 'QImage'に読み込まれます。イメージ上で 'QImage :: scaled'を使用すると、ピクセル情報が失われ、イメージは必要なものに対して役に立たなくなります。 – arieltools

関連する問題