フレームを表示

L_LoadMemory

フレームを表示

#include "l_bitmap.h"

L_LTFIL_API L_INT L_LoadMemorypBuffer、pBitmap、uStructSize、nBitsPerPixel、nOrder、uFlags、pfnCallback、pUserData、nBufferSize、pLoadOptionspFileInfo

L_UCHAR* pBuffer;

ロードした*/であるためにメモリ内のファイルに/*ポインター

pBITMAPHANDLE pBitmap;

/* ビットマップハンドルへのポインター*/

L_UINT uStructSize;

/* pBitmapがポイントする構造のサイズ(バイト単位) */

L_INT nBitsPerPixel;

/* 結果として生じるビットマップビット数*/

L_INT nOrder;

/* 目的のカラーオーダー*/

L_UINT uFlags;

/* 関数動作を決定するフラグ*/

FILEREADCALLBACK pfnCallback;

/* オプションのコールバック関数*/

L_VOID* pUserData;

/* コールバックのためのより多くのパラメータへのポインター*/

L_SSIZE_T nBufferSize;

メモリ(バイトの)*/のファイルの/*サイズ

pLOADFILEOPTION pLoadOptions;

/* オプションの拡張ロードオプションへのポインター*/

pFILEINFO pFileInfo;

/* 構造体へのポインタ*/

any supported ファイルをmemory using a callback 関数からロードします。

パラメーター

説明

pBuffer

メモリ内のロードされるファイルへのポインター。

pBitmap

画像データで塗りつぶされるためにビットマップを参照文に引用しているビットマップハンドルへのポインター。

uStructSize

バージョニングのためのバイト(pBitmapによってポイントされる構造体の)のサイズ。sizeof(BITMAPHANDLE)を使います。

nBitsPerPixel

結果として生じるビットマップビット数。以下は、有効値です:

 

意味

 

0

オリジナルファイルのビット数(変換しません)を保持します。12ビットおよび16ビットのグレースケール画像のロードに関する特別な注意.

 

8への1

結果として生じるビットマップの指定されたピクセル当たりビット

 

12

結果として生じるビットマップの12ビット/ピクセル。

 

16

結果として生じるビットマップの16ビット/ピクセル

 

24

結果として生じるビットマップの24ビット/ピクセル

 

32

結果として生じるビットマップの32ビット/ピクセル

 

48

結果として生じるビットマップの48ビット/ピクセル

 

64

結果として生じるビットマップの64ビット/ピクセル

 

nOrder

目的のカラーオーダー。設定可能な値は、以下の通りです。

 

意味

 

ORDER_RGB

[0] 赤/緑/青は注文します。

 

ORDER_BGR

[1] 青緑色赤は注文します。

 

ORDER_GRAY

[2] 12または16ビットグレースケールimage。12と16ビットグレースケールイメージは、DocumentとMedical画像化ツールキットでサポートされるだけです。

 

0

データは、8ビット/ピクセル以下です。

 

ORDER_RGBORGRAY

[3] 赤い、緑、青として、または12ビットまたは16ビットのグレースケールimageとして画像をロードします。12と16ビットグレースケールイメージは、DocumentとMedical画像化ツールキットでサポートされます。

 

ORDER_BGRORGRAY

[4] 青、緑、赤として、または12ビットまたは16ビットのグレースケールimageとして画像をロードします。12と16ビットグレースケールイメージは、DocumentとMedical画像化ツールキットでサポートされます。

 

ORDER_ROMM

[5] ROMMオーダー。ロンムは、24ビットと48ビットのイメージのみをサポートします。

 

ORDER_BGRORGRAYORROMM

[6] 赤い、緑、青として、または12ビットまたは16ビットのグレースケールimageとして、またはROMMとして画像をロードします。12と16ビットグレースケールイメージは、DocumentとMedical画像化ツールキットでサポートされます。ROMMは、24ビットと48ビットのカラーイメージのみをサポートします。

uFlags

L_LoadMemoryの動作を決定するバイナリフラグ。以下の値の一つ以上を指定することができます:

 

意味

 

LOADFILE_ALLOCATE

[0x0001]、関数はメモリを指定されたビットマップに割り当てます。

 

LOADFILE_STORE

[0x0002]、関数は指定されたビットマップにデータをロードします。(これがコールバック関数の動作に加えて起こります。)

 

LOADFILE_FIXEDPALETTE

[0x0004] このフラグは、パレット画像を固定パレットに強制的にディザリング処理させます。

 

LOADFILE_NOINTERLACE

[0x0008]、それがどのようにファイルで保存されるかに関係なく、関数は示される順序で画像データを渡します。(プログラムがインタレースファイルフォーマットを処理しないならば、このフラグを設定します。)

 

LOADFILE_ALLPAGES

[0x0010]、関数は複数ページのファイルのすべてのページをロードします。L_AppendPlayback関数を用いてビットマップリストを作成する場合だけ、このフラグを使います。

  LOADFILE_NOINITBITMAP

[0x0020]、それがファイルをロードするとき、関数はビットマップハンドルを初期化しません。BITMAPHANDLE構造体で必要情報の全てを供給する場合だけ、このフラグを使います。

 

LOADFILE_COMPRESSED

[0x0040]できれば、1-ビットRLE-圧縮imageとして、ファイルをロードします。(ドキュメントとMedical Imagingツールキット)詳細については、「1ビット画像処理の高速化」を参照してください。

LOADFILE_MULTITHREADED [0x2000]、マルチスレッドのロードを使います

pfnCallback

追加の処理のためのオプションのコールバック関数。

 

コールバック関数を提供しないならば、このパラメーターの値としてNULLを使います。

 

コールバック関数を提供するならば、このパラメーターの値として関数ポインターを使用します。

 

コールバック関数は、FILEREADCALLBACK関数で説明される関数のプロトタイプに準拠しなければなりません。

pUserData

コールバック関数が必要とする一つ以上の追加のパラメータを渡すために使用することができるボイドポインター。

 

この機能を使用するには、値を変数に割り当てるか、必要な数のフィールドを格納する構造体を作成します。その後、このパラメーターで、変数または構造体のアドレスを渡し、L_VOID *に呼び出します。独自のpUserDataパラメーターでアドレスを受け取るコールバック関数は、適切なデータタイプのポインターにキャストし変数や構造体にアクセスします。

 

これ以上パラメーターが必要ない場合は、このパラメーターでNULLを渡すこともできます。

nBufferSize

メモリ(バイトの)のファイルのサイズ。

pLoadOptions

オプションの拡張ロードオプションへのポインター。デフォルトのロードオプションを使うために、NULLを渡します。

pFileInfo

FILEINFO構造体へのポインター。この構造体はimageをロードする際に使われるファイル情報を格納するかもしれません、または、それはロードされているファイルに関する情報で更新されるかもしれません。

 

何もファイルについてわかっていないならば、このパラメーターのためにNULLを渡します、さもなければ、型FILEINFOの変数を宣言して、FILEINFO.Flagsを0に設定します、そして、このパラメーターでFILEINFO構造体のアドレスを渡します。この場合、FILEINFO構造体のアドレスが渡されるならば、FILEINFO構造体はL_FileInfoの結果で更新されます。

 

ファイルタイプが知られさえすれば、pFileInfo.Formatをファイルタイプに設定して、pFileInfo.FlagsをFILEINFO_FORMATVALIDに設定します。L_FileInfoが以前に呼び出されたならば、これはされることもできます、しかし、ロードされるimageのサイズに影響を及ぼす値は変更されました(たとえば、L_SetPCDResolutionまたはL_SetWMFResolutionを呼び出すことによって)。この場合、構造体がpFileInfoによってポイントしたFILEINFOは、L_FileInfoの結果で更新されます。

 

若干のファイルフォーマットは、はっきりしたファイル署名を格納しません。これは、特にドキュメントファイルフォーマット(TXT、PSTその他)のためのtrueです。LEADTOOLSは、まだファイル名拡張子を使用してファイルフォーマットを検出することができます(例「.PST」)。しかし、ロードがメモリからファイルするとき、ファイル名拡張子は利用できません。ファイル名拡張子でこの関数を提供するために、メモリからロードするとき、FILEINFO_NAMEVALIDに拡張とpFileInfo.FlagsでpFileInfo.Nameを画像ファイルの名前に設定します。

 

L_FileInfoがこの関数を呼び出す前に呼び出されたならば、そして、変化はL_FileInfoによって塗りつぶされる構造体のコンテンツになされませんでした、そして、塗りつぶされたFILEINFO構造体のアドレスはこのパラメーターのために渡されることができます。この場合、FILEINFO.Flagsメンバは、FILEINFO_INFOVALIDに設定されなければなりません。L_FileInfo関数は、FILEINFO.FlagsをFILEINFO_INFOVALIDに設定します。この場合、この関数がファイルがファイルのためにフィルタリングすると尋ねる必要がないため、ロードはより高速でしょう型。

 

注意:ローカル変数は、初期化されません(スタックに置かれるため)。それで、ローカル変数としてFILEINFO構造体を持っているならば、そのFlagsパラメーターの値は未定義です。そして、おそらくFILEINFO_INFOVALIDまたはFILEINFO_FORMATVALIDを設定しておきます。そういうわけで、関数にFILEINFO構造体のアドレスを渡す前にFILEINFO.Flagsを初期化することは、重要です。

戻り値

SUCCESS

関数は成功しました。

<1

エラーが発生しました。リターンコードを参照してください

コメント

12と16ビットグレースケールイメージのサポートは、DocumentとMedical画像化ツールキットで利用できるだけです。

コールバック関数はimageを画面に表示することができるか、ファイルに書くことができるか、他の役に立つことをすることができます。

この関数はバッファを作成して、それを実際の画像データで満たします。一度バッファがいっぱいだったら、コールバック関数は呼び出されます。

この関数を呼び出す前に、複数ページのファイルのページ番号などの、ファイル情報を取得または設定する必要があるかもしれません。ファイル情報を取得して、設定することを参照してください

この関数が、L_RedirectIOと結合して使われることができません。

注意:

向け直されたIOは、若干のファイルフォーマットのためにサポートされません。詳細については、「リダイレクトIOがサポートされないファイル形式」を参照してください。

注意:

より多くのオプションは、LOADFILEOPTION構造体で利用できます。

注意:この関数に初期化されていないFILEINFO構造体を決して渡すべきでありません。

必須のDLLとライブラリ

LTFIL
ファイルフォーマットDLL

ツールキットバージョンに基づいた正確なDLLとライブラリのリストについては、「アプリケーションとともに配布するファイル」を参照してください

プラットホーム

Win32、x64、Linux

参照

関数:

L_LoadBitmapMemory, L_LoadBitmapMemory, L_LoadMemory, L_SetWMFResolution, L_SetLoadInfoCallback, L_DlgOpen, L_CreatePanWindow, L_SetLoadResolution, L_SetPCDResolution,
Vectorファイルのために:L_2DGetViewMode, L_2DGetViewPort, L_2DSetViewMode, L_2DSetViewPort

トピック:

ラスター画像は機能します:ファイルのロード

 

ラスター画像は機能します:入出力のリダイレクト

 

ラスター画像は機能します:入出力

 

イメージのロードと保存

 

パンウィンドウの使用

 

LOADFILEOPTIONまたはSAVEFILEOPTION構造体を利用する関数のリストについては、LOADFILEOPTIONまたはSAVEFILEOPTION構造体を利用している関数を参照します。

サンプル

完了したサンプルコードについては、MEMORYCBサンプルを参照します。このサンプルは一時的なビットマップをロードして、メモリ内のファイルとしてそれを保存して、そして、グローバルなビットマップハンドルにメモリ常駐のファイルをロードします。ロード描画機能を実装することは、コールバック関数でL_LoadMemoryを使います。コールバック関数がどのように画像データを描画するか見るFILEREADCALLBACK関数を参照してください

#define MAKE_IMAGE_PATH(pFileName) TEXT("C:\\Users\\Public\\Documents\\LEADTOOLS Images\\")pFileName


/* Structure used for the callback function's user data */
typedef struct tagIMAGECBPARM
{
   HWND hwnd;     /* Current window                        */
   HDC  hdc;      /* Device context for the current window */
} IMAGECBPARM;

static L_INT EXT_CALLBACK LoadImageCB(pFILEINFO     pFileInfo,
                                      pBITMAPHANDLE pBitmap,
                                      L_UCHAR     * pBuffer,
                                      L_UINT        uFlags,
                                      L_INT         nRow,
                                      L_INT         nLines,
                                      L_VOID      * pUserData)
{
   static RECT rLeadSource;
   static RECT rLeadDest;
   IMAGECBPARM *pData = (IMAGECBPARM*)pUserData;

   /* If this is the first call (row 0), select and realize the palette */
   if((uFlags & FILEREAD_FIRSTPASS) && (uFlags & FILEREAD_FIRSTROW) )
   {
      /* Set the source rectangle to use the whole bitmap */
      SetRect(&rLeadSource, 0, 0, pFileInfo->Width, pFileInfo->Height);
      /* Set the dest rectangle to use the whole client area */
      GetClientRect(pData->hwnd, &rLeadDest);
   }

   /* Paint the buffer to the specified device context */
   L_PaintDCBuffer( pData->hdc, /* Device context - from function parameter */
                    pBitmap, /* Bitmap handle - from function parameter */
                    &rLeadSource, /* Source rect - set globally in WM_CREATE */
                    &rLeadSource, /* Source clip rect - same as source rect */
                    &rLeadDest, /* Destination rect - set globally in WM_CREATE */
                    &rLeadDest, /* Destination clip rect - same as destination rect */
                    SRCCOPY, /* ROP code for normal painting */ 
                    pBuffer, /* Input buffer - from function parameter */ 
                    nRow, /* First row in the buffer - from function parameter */ 
                   (uFlags & FILEREAD_COMPRESSED) ? -nLines : nLines );
   return( SUCCESS );
}

L_LTFILTEX_API  L_INT LoadMemoryExample(HWND hWnd)
{
   L_INT nRet; 
   BITMAPHANDLE TmpBitmap;       /* Bitmap handle for the initial image */
   HGLOBAL hFileInMemory=NULL;   /* Memory handle                       */
   L_SIZE_T uMemSize;            /* Size of the data in memory          */
   L_UCHAR *pData;               /* Pointer to the data in memory       */
   static IMAGECBPARM UserData;  /* Structure used for the callback function's user data */
   FILEREADCALLBACK lpfnCallBack;

   /* Load a bitmap at its own bits per pixel  */
   nRet = L_LoadBitmap (MAKE_IMAGE_PATH(TEXT("ImageProcessingDemo\\Image3.cmp")), &TmpBitmap, sizeof(BITMAPHANDLE), 0, ORDER_BGR, NULL, NULL);
   if(nRet != SUCCESS)
      return nRet;

   /* Save the image as a CMP file in memory */
   nRet = L_SaveBitmapMemory(&hFileInMemory, &TmpBitmap, FILE_CMP, 24, QS, &uMemSize, NULL);
   if(nRet != SUCCESS)
      return nRet;

   /* Free the temporary bitmap */
   L_FreeBitmap(&TmpBitmap);

   /* Get the pointer to the memory-resident file */
   pData = (L_UCHAR *) GlobalLock (hFileInMemory);

   /* Set the user data used for the callback in the nRet = L_LoadFile function */
   UserData.hwnd = hWnd;         /* Current window */
   UserData.hdc = GetDC( hWnd ); /* Device context for the current window */

   /* Set the callback function for the L_LoadFile function.*/
   lpfnCallBack = (FILEREADCALLBACK)LoadImageCB;

   /* Load the file, calling lpfnCallBack to paint the bitmap. */
   nRet = L_LoadMemory(pData,
                      &TmpBitmap, sizeof(BITMAPHANDLE),
                      0,
                      ORDER_BGR,
                      LOADFILE_ALLOCATE |  LOADFILE_STORE,
                      lpfnCallBack,
                      &UserData,
                      uMemSize,
                      NULL, NULL);
   if(nRet != SUCCESS)
      return nRet;

   /* Clean up */
   GlobalUnlock (hFileInMemory);
   GlobalFree (hFileInMemory);
   nRet = L_SaveBitmap(MAKE_IMAGE_PATH(TEXT("Result.BMP")), &TmpBitmap, FILE_BMP, 24, 0, NULL);
   L_FreeBitmap(&TmpBitmap);

   if(nRet != SUCCESS)
      return nRet;
   return SUCCESS;
}

/*******************************************************************************/