2017-02-17 11 views
3

Qtのドキュメントによると、QImageWriterにはsetCOmpressionメソッドがあり、このメソッドは選択したイメージフォーマットに依存します。たとえば、tiff画像の場合、0は圧縮なし、1はLZW圧縮を意味します。同じトークンで、フォーマットをddsに設定してから、このメソッドを次のように呼び出します。QImageWriterを使用したDDSイメージの圧縮

QImageWriter writer(dir); 
writer.setFormat("dds"); 
writer.setCompression(5); 
bool saved = writer.write(image); 

imageはもちろんQImage変数です。しかし、私の結果の画像に圧縮はありません。私はImageMagickを使用して手動で圧縮し、圧縮されたイメージはより小さなサイズになります。 Qtはddsファイルを出力しますが、圧縮されていません。だから私はどのように圧縮を設定することができます。 DXT5に圧縮レベルを設定することを期待して、パラメータとして5を選択しました。

答えて

1

あなたが使用しているQtバージョンではまだ誰もそれを実装していないので、圧縮はありません。この機能が最新のQtに実装されていない場合は機能要求を提出し、Qtのコピーをパッチして(この機能をバックポートとして)追加してください。最新のバージョンがそれを実装していない場合は、変更をQtに提出してください:)

+0

それはバージョンですか? – dtech

+0

@ddriver Askerが使用しているバージョンはどんなものでも、ここでは推測できません。 –

+1

特定のバージョンを明示的にも暗黙的にも知らなくても、あなたはそれを知っているように聞こえました。また、特定のバージョンで実装されています。私が推測する文言の問題;) – dtech

3

Qtが圧縮されたDDSテクスチャを保存するまでは、SOIL2をプロジェクトに静的にリンクすることをお勧めします。

https://bitbucket.org/SpartanJ/soil2

次のようにQImageとのsave_image_as_DDS()機能を使用することができます。

QImage *pTexture = [Your initial image] 
AtlasTextureType eTextureType = [Your desired image type] 

switch(eTextureType) 
{ 
    case ATLASTEXTYPE_PNG: { 
     if(false == pTexture->save("MyTexture.png")) { 
      Log("failed to generate a PNG atlas", LOGTYPE_Error); 
     } 
    } break; 

    case ATLASTEXTYPE_DTX5: { 
     QImage imgProperlyFormatted = pTexture->convertToFormat(QImage::Format_RGBA8888); 
     if(0 == SOIL_save_image_quality("MyTexture.dds", 
             SOIL_SAVE_TYPE_DDS, 
             imgProperlyFormatted.width(), 
             imgProperlyFormatted.height(), 
             4, 
             imgProperlyFormatted.bits(), 
             0)) 
     { 
      Log("failed to generate a DTX5 atlas", LOGTYPE_Error); 
     } 
    } break; 

    case ATLASTEXTYPE_DTX1: { 
     QImage imgProperlyFormatted = pTexture->convertToFormat(QImage::Format_RGB888); 
     if(0 == SOIL_save_image_quality("MyTexture.dds", 
             SOIL_SAVE_TYPE_DDS, 
             imgProperlyFormatted.width(), 
             imgProperlyFormatted.height(), 
             3, 
             imgProperlyFormatted.bits(), 
             0)) 
     { 
      Log("failed to generate a DTX1 atlas", LOGTYPE_Error); 
     } 
    } break; 
} 
関連する問題