3D技術研究所Wiki > 公開物 > DDSReader

DDSReaderについてまとめています。

目次


DDSReaderについて

DDSReaderはDDS画像の読み込みを行う小さなプログラムです。
開発はJavaで行っており、C言語に移植されたものもありますので、
Java, C, C++, Objective-Cなどの言語から利用可能です。

特徴はDDSのフォーマットとは無関係にARGB32ビット配列を
指定したバイトオーダーで作成するようになっており、
DDSのフォーマットを意識することなくシンプルにコーディングできるようになっています。

ライセンスはMITライセンスですので安心してお使い下さい。

https://github.com/npedotnet/DDSReader/blob/master/LICENSE

DDSReader.png

GWTを使ってブラウザ上でTGA画像を利用することもできます。
http://npe-net.appspot.com/npesdk/gwt/ddsimagedemo/index.html

ddsimagedemo.png

DDS画像のWebGL(GwtGL)デモ
http://npe-net.appspot.com/npesdk/gwt/ddswebgldemo/index.html

ddswebgldemo.png

GoogleChrome, FireFox, Safariで動作確認済み。
IEでは動作しないので現在調査中。

使い方

1. ソースコードをダウンロードしてプロジェクトへ追加します

https://github.com/npedotnet/DDSReader

githubからソースコードをダウンロードして下さい。

Java

DDSReader.javaをプロジェクトに追加してpackage名を変更して下さい

C

dds_reader.c, dds_reader.hをプロジェクトへ追加して下さい

2. DDS画像のバイト配列を用意します

Java

1
2
3
4
FileInputStream fis = new FileInputStream(new File("test.dds"));
byte [] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();

C

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "dds_reader.h"

FILE *file = fopen("test.dds", "rb");
if(file) {
    int size;
    fseek(file, 0, SEEK_END);
    size = ftell(file);
    fseek(file, 0, SEEK_SET);

    unsigned char *buffer = (unsigned char *)ddsMalloc(size);
    fread(buffer, 1, size, file);
    fclose(file);
}

3. 色の並びを指定してピクセルデータを作成します

色の並びJavaC用途
ARGBDDSReader.ARGBDDS_READER_ARGBjava.awt.image.BufferedImage作成
android.graphics.Bitmap作成
ABGRDDSReader.ABGRDDS_READER_ABGROpenGL Texture(GL_RGBA)作成
iOS UIImage作成

読み込み関数(DDSReader.read, ddsRead)の第1引数にバッファ、第2引数に色オーダー、第3引数にミップマップ番号(ない場合は0)を渡して下さい。

Java

1
2
3
4
byte [] buffer = ...;
int [] pixels = DDSReader.read(buffer, DDSReader.ARGB, 0);
int width = DDSReader.getWidth(buffer);
int height = DDSReader.getHeight(buffer);

C

1
2
3
4
unsigned char *buffer = ...;
int *pixels = ddsRead(buffer, DDS_READER_ABGR, 0);
int width = ddsGetWidth(buffer);
int height = ddsGetHeight(buffer);

4. プラットフォームに合わせた使い方をして下さい

5. 解放処理をします

※C言語版のみです

C

1
2
3
4
5
6
unsigned char *buffer = ...;
int *pixels = ddsRead(buffer, DDS_READER_ABGR);
if(pixels) {
    ddsFree(pixels);
}
ddsFree(buffer);

メモリマネジメント

※C言語版のみです

もし独自のメモリマネジメントシステムをお使いの場合は ddsMalloc(), ddsFree() をカスタマイズして下さい。

C

1
2
3
4
5
6
7
void *ddsMalloc(size_t size) {
    return malloc(size);
}

void ddsFree(void *memory) {
    free(memory);
}

対応済み機能

  • MIPMAP(ミップマップ)

対応済みフォーマット

  • DXT圧縮フォーマット(DXT1, DXT2, DXT3, DXT4, DXT5)
  • 16bitRGBフォーマット(A1R5G5B5, X1R5G5B5, A4R4G4B4, X4R4G4B4, R5G6B5)
  • 24bitRGBフォーマット(R8G8B8)
  • 32bitRGBフォーマット(A8B8G8R8, X8B8G8R8, A8R8G8B8, X8R8G8B8)

未対応機能

未対応フォーマット

  • 対応済みRGBフォーマット以外のRGBフォーマット
  • Luminanceフォーマット
  • YUVフォーマット
  • Floating-Point(浮動小数点)フォーマット
  • その他のフォーマット


関連ページ


スポンサードリンク


添付ファイル: fileddswebgldemo.png 1288件 [詳細] fileddsimagedemo.png 4511件 [詳細] fileDDSReader.png 1258件 [詳細]
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS