#include "l_bitmap.h"
L_LTFIL_API L_INT L_SaveBitmapMemory(phHandle、pBitmap、nFormat、nBitsPerPixel、nQFactor、puSize、pSaveOptions)
L_HGLOBAL* phHandle; |
/* メモリハンドルのアドレス*/ |
pBITMAPHANDLE pBitmap; |
/* ビットマップハンドルへのポインター*/ |
L_INT nFormat; |
/* 出力ファイル形式*/ |
L_INT nBitsPerPixel; |
/* 得られるファイルのビット数*/ |
L_INT nQFactor; |
/* Qファクター*/ |
L_SIZE_T* puSize; |
/* 更新されるファイルサイズ変数のアドレス*/ |
pSAVEFILEOPTION pSaveOptions; |
/* オプションの拡張セーブオプションへのポインター*/ |
メモリ内のファイルにビットマップを保存します。出力は、サポートされた圧縮または未圧縮ファイルフォーマットのどれででもあることができます。
パラメーター |
説明 |
phHandle |
保存されたimageを格納する新しいメモリハンドルで更新されるメモリハンドルへのポインター。付加既存のimageへの1ページに、このポインターは、有効メモリーハンドルをポイントしなければなりません(*phHandle!=NULL)。imageをメモリ内の保存しておかないならば、このポインターはNULL(*phHandle=NULL)をポイントしなければなりません。 有効メモリーハンドルを渡すならば、古いハンドルは作成される病人と新しいハンドルになります。新しいハンドルは古い操作機能と同じ値を持っているかもしれませんが、これは保証されません。 |
pBitmap |
画像データを保持するビットマップを参照文に引用しているビットマップハンドルへのポインター。 |
nFormat |
ファイルフォーマットを出力します。有効な値については、「アプリケーションとともに配布するファイル」を参照してください。 |
nBitsPerPixel |
得られるファイルは、ビット数です。すべてのピクセル当たりビットがすべてのファイルフォーマットが利用できるというわけではないことに注意すべきです。有効な値については、「アプリケーションとともに配布するファイル」を参照してください。nBitsPerPixelが0であると、ファイルはそのフォーマットがサポートするBitsPerPixel値で最も近い値を使用して保存されます。たとえば、ファイルフォーマットが1、4と24のBitsPerPixelをサポートするならば、そして、pBitmap->BitsPerPixelは5です、ファイルは24ビットとして保存されます。同様に、pBitmapならば、->BitsPerPixelは2です、ファイルは4ビットとして保存されます。 |
nQFactor |
Qファクター(QFactor)をサポートするファイルフォーマットにimageを保存するとき、このパラメーターが使われます。QFactorは、圧縮プロセスに損失の程度を決定する数です。 |
|
可能な値については、「圧縮Qファクター」を参照してください。 |
puSize |
変数の世代を申し出ます、そしてそれは、関数はファイルのサイズを与えるために更新します。 |
pSaveOptions |
任意へのポインターは、オプションを除いて拡張しました。デフォルトを使うパスNULLは、オプションを保存します。 |
戻り値
SUCCESS |
関数は成功しました。 |
<1 |
エラーが発生しました。リターンコードを参照してください |
コメント
この関数を使って、以下をすること:
1。 |
メモリハンドルを宣言します。この関数でそのアドレスをその後渡すことができます。そして、それはメモリを割り当てて、ビットマップを保存して、メモリをロック解除します。HANDLEの値をNULLに設定します。 |
2。 |
倍長整数(L_UINT32)をファイルサイズのために可変であると宣言します。この関数でそのアドレスをその後渡すことができます。そして、それはファイルのサイズでその値を更新します。 |
3。 |
指定されたメモリハンドルでビットマップを保存するために、この関数を呼び出します。 |
12と16ビットグレースケールイメージのサポートは、DocumentとMedical画像化ツールキットで利用できるだけです。
この関数が、L_RedirectIOと結合して使われることができません。
注意: |
より多くのオプションは、SAVEFILEOPTION構造体で利用できます。しかし、SAVEFILEOPTION構造体のPageNumberデータメンバがこの関数で有効でない点に注意してください。したがって、この関数で複数ページのファイルを保存することができません。 |
注意: |
向け直されたIOは、若干のファイルフォーマットのためにサポートされません。詳細については、「リダイレクトIOがサポートされないファイル形式」を参照してください。 |
この関数は符合付きデータイメージをサポートします、しかし、DICOMとTIFF形式だけは符合付きデータをサポートします。DICOMまたはTIFF以外の形式に符合付きimageを保存しようとするならば、この関数はエラーコードを返します。
ビットマップがリージョンを持っているならば、imageがTIFFファイルフォーマットの1つとして保存されるならば、ビットマップで保存されるリージョンは保存されます。
ファイルを保存するとき、もう一つに1つのファイルフォーマットを変換することができます。他のどの可能性がある形式にも考えられるあらゆる形式を変換するために、高水準関数(L_FileConvert)を使うこともできます。
LEADTOOLSバージョン17以上において、2値画像(1-ピクセル当たりビット)にカラー画像(24ビット/ピクセルimageなどの)を保存するとき、ツールキットは画像データを変換するとき、任意のディザ処理を使いません。OCRとバーコードなどの文書処理のためにテキストを格納している色のついたイメージを変換するときディザ処理が推奨のものでないので、これはされます。結果テキストはあいまいで、処理する認識エンジンに難しいでしょう。フロイド-スタインディザ処理(LEADTOOLS 16.5以前の動作)による2値画像が下に示すようにBITMAPHANDLE.DitheringMethodとともにESO_USEDITHERINGMETHODを使うようにカラー画像を保存すること:
//『pBitmap』が、色BITMAPHANDLEです
//セットアップFloydSteinディザ処理:
bitmapHandle.DitheringMethod = FLOYD_STEIN_DITHERING;
SAVEFILEOPTION saveOptions ={0};
L_GetDefaultSaveFileOption(&saveOptions、sizeof(SAVEFILEOPTION));
saveOptions.Flags |= ESO_USEDITHERINGMETHOD;
//保存自動ディザ処理による1-bppとしてのビットマップ:
L_SaveBitmap(fileName、&bitmapHandle、FILE_CCITT_GROUP4、1、0、&saveOptions);
//、または、他のどのL_SaveBitmapXyzまたはL_SaveFileXyzも、以下などの機能します:
//L_SaveFile(fileName、&bitmapHandle、FILE_CCITT_GROUP4、1、0、0、NULL、NULL、&saveOptions)
必須のDLLとライブラリ
LTFIL ツールキットバージョンに基づいた正確なDLLとライブラリのリストについては、「アプリケーションとともに配布するファイル」を参照してください。 |
Win32、x64、Linux。
参照
関数: |
|
トピック: |
|
|
|
|
|
|
|
|
|
|
|
|
LOADFILEOPTIONまたはSAVEFILEOPTION構造体を利用する関数のリストについては、LOADFILEOPTIONまたはSAVEFILEOPTION構造体を利用している関数を参照します。
サンプル
完了したサンプルコードについては、SAVEMEMサンプルを参照します。このサンプルは一時的なビットマップをロードして、メモリ内のファイルとしてそれを保存して、そして、新しいビットマップハンドルにメモリ常駐のファイルをロードします。
#define MAKE_IMAGE_PATH(pFileName) TEXT("C:\\Users\\Public\\Documents\\LEADTOOLS Images\\")pFileName L_LTFILTEX_API L_INT SaveBitmapMemoryExample(L_VOID) { L_INT nRet; BITMAPHANDLE LeadBitmap; /* Bitmap handle for the final image */ 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 */ /* 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 */ if(TmpBitmap.Flags.Allocated) L_FreeBitmap(&TmpBitmap); /* Get the pointer to the memory-resident file */ pData = (L_UCHAR *) GlobalLock (hFileInMemory); /* Load the new bitmap from memory at its own bits per pixel */ nRet = L_LoadBitmapMemory (pData, &LeadBitmap, sizeof(BITMAPHANDLE), 0, ORDER_BGR, uMemSize, NULL, NULL); if(nRet != SUCCESS) return nRet; /* Clean up */ GlobalUnlock (hFileInMemory); GlobalFree (hFileInMemory); L_FreeBitmap(&LeadBitmap); return SUCCESS; }