2011-06-24 5 views
2

私はFreeImageライブラリを使って画像を読み込んでOpenGLに渡しています。現在、ファイルから画像を読み込むことができます。しかし、これをゲームコンテンツパッケージの目的のために変数から読み取れるように拡張したいと思います。要するに、基本的には、ファイル全体、ヘッダー、およびすべてがunsigned char *に書き込まれています。私はこのバッファを取り、それをこれに似た何かをしたい(変数FIFが宣言されていると仮定):メモリから画像データを取得する

FIBITMAP * dib = FreeImage_Load(fif, "someImage.png"); 

代わりsomeImage.png、私は(unsigned char型*を指定するためのバッファにそれを呼び出すことができます質問のために)。そのようなことを処理できるメソッドがライブラリにありますか?

EDIT:「someImage.png」がunsigned char *と見なされると考えると、より具体的になるはずです。

、unsigned char型の値が*バッファは、この擬似コードのようなものによって決定されるだろうがあれば、混乱を解消するには:

fileStream = openFile "someImage.png" 
    unsigned char * buffer = fileStream.ReadToEnd 

答えて

5

あなたがFreeImage_ConvertToRawBitsを使いたいように聞こえます。ドキュメントの例を次に示します。

// this code assumes there is a bitmap loaded and 
    // present in a variable called ‘dib’ 
    // convert a bitmap to a 32-bit raw buffer (top-left pixel first) 
    // -------------------------------------------------------------- 
    FIBITMAP *src = FreeImage_ConvertTo32Bits(dib); 
    FreeImage_Unload(dib); 
    // Allocate a raw buffer 
    int width = FreeImage_GetWidth(src); 
    int height = FreeImage_GetHeight(src); 
    int scan_width = FreeImage_GetPitch(src); 
    BYTE *bits = (BYTE*)malloc(height * scan_width); 
    // convert the bitmap to raw bits (top-left pixel first) 
    FreeImage_ConvertToRawBits(bits, src, scan_width, 32, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, TRUE); 
    FreeImage_Unload(src); 
    // convert a 32-bit raw buffer (top-left pixel first) to a FIBITMAP 
    // ---------------------------------------------------------------- 
    FIBITMAP *dst = FreeImage_ConvertFromRawBits(bits, width, height, scan_width, 32, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, FALSE); 
+0

これは私が必要とするかもしれない、私は試してみるつもりです。 +1! – MGZero

+0

申し訳ありませんが、ピッチパラメーターが正確に何を説明できますか?おそらく私はスキャンラインが何であるか本当に分かっていないので、おそらくドキュメントからは分かりません。 – MGZero

+0

ピッチはイメージの1行あたりのバイト数です。これは、通常、アライメントとパフォーマンス上の理由から、イメージの幅よりも少し大きくなるようにパディングされています。イメージがきつく詰め込まれている場合は、1ピクセルあたりの幅は*バイトになります。 – Mikola

0

FreeImage_LoadFromHandleを使用してください。バッファにアクセスできる3つの関数を作成し、それらの関数のアドレスをFreeImageIO構造体に入れる必要があります。

関連する問題