#include "ltfil.h"
L_LTFIL_API L_INT L_DecodeABIC(pInputData, nLength, ppOutputData, nAlign, nWidth, nHeight, bBiLevel)
Decodes the ABIC data and updates the ppOutputData parameter with the uncompressed raw data.
Pointer to the input buffer that contains the ABIC compressed data.
Size of the compressed data.
Pointer to a pointer to an output buffer to be updated with the uncompressed raw data.
Number of bytes used for aligning the uncompressed raw data pointed to by ppOutputData.
Width of the compressed ABIC data image, in pixels.
Height of the compressed data image, in pixels.
Flag that indicates whether the input data is bi-level or grayscale. Possible values are:
Value | Meaning |
---|---|
TRUE | Input data pointed to by pInputData is 1-bit Bi-level. |
FALSE | Input data pointed to by pInputData is 4-bit Grayscale. |
Value | Meaning |
---|---|
SUCCESS | The function was successful. |
< 1 | An error occurred. Refer to Return Codes. |
The function decompresses 1-bit bi-level or 4-bit grayscale ABIC raw data.
The output buffer pointed to by ppOutputData
is allocated automatically by the function. The user is responsible for freeing this ppOutputData buffer by calling GlobalFreePtr() function.
Required DLLs and Libraries
Win32, x64.
#define DIB_WIDTH_BYTES(b) (((L_UINT) ((((L_UINT32) (b)) + 31) >> 3)) & ~3)
#define ROUNDEDBYTESPERLINE(w, b) DIB_WIDTH_BYTES((L_UINT32) (w) * (L_UINT32) (b))
L_INT DecodeABICExample(pBITMAPHANDLE pBitmap, HWND hwnd)
{
L_INT nRet;
L_INT nLength;
L_UCHAR *pData;
L_INT nOutLength;
L_UCHAR *pOutData;
L_HANDLE hFile;
DWORD wReadBytes;
RGBQUAD MyGrayPal[ 16 ];
/* open file */
/* this is IMAGE1.CMP resaved as 4-bit ABIC RAW */
hFile = CreateFile(MAKE_IMAGE_PATH(TEXT("ABIC4.RAW")), GENERIC_ALL, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if( NULL != hFile )
{
/* calculate length of data and load it from the file */
SetFilePointer(hFile, 0, 0, FILE_END);
nLength = SetFilePointer(hFile, 0, NULL, FILE_CURRENT) ;
SetFilePointer(hFile, 0, 0, FILE_BEGIN);
pData = (L_UCHAR *)GlobalAllocPtr( GMEM_FIXED, nLength );
if( NULL == pData )
{
CloseHandle( hFile );
return -1; /* no memory */
}
if(!ReadFile (hFile, pData, nLength, &wReadBytes, NULL))
{
GlobalFreePtr( pData );
CloseHandle( hFile );
return -1; /* failed while reading */
}
CloseHandle( hFile );
/* decode the data */
pOutData = NULL;
nRet = L_DecodeABIC( pData, nLength, &pOutData, 4, 1600 /* width */, 1200 /* height */, FALSE );
GlobalFreePtr( pData );
if( SUCCESS == nRet )
{
if( pBitmap->Flags.Allocated )
L_FreeBitmap( pBitmap );
nOutLength = 1200 * ROUNDEDBYTESPERLINE( 1600, 4 );
struct
{
BITMAPINFO info;
RGBQUAD colors[ 15 ];
} BitmapInfo;
memset(&BitmapInfo, 0, sizeof(BitmapInfo));
BitmapInfo.info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
BitmapInfo.info.bmiHeader.biWidth = 1600;
BitmapInfo.info.bmiHeader.biHeight = 1200;
BitmapInfo.info.bmiHeader.biBitCount = 4;
nRet = L_ConvertFromDIB( pBitmap, sizeof(BITMAPHANDLE), &BitmapInfo.info, pOutData);
/* prepare gray scale 16-color palette */
for( L_INT k = 0 ; k < 16 ; k++ )
{
MyGrayPal[ k ].rgbBlue = (BYTE )(0x11 * k);
MyGrayPal[ k ].rgbRed = (BYTE )(0x11 * k);
MyGrayPal[ k ].rgbGreen = (BYTE )(0x11 * k);
MyGrayPal[ k ].rgbReserved = 0;
}
nRet = L_PutBitmapColors( pBitmap, 0, 16, MyGrayPal );
GlobalFreePtr( pOutData );
InvalidateRect( hwnd, NULL, TRUE );
}
}
else
return -1;
return SUCCESS;
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
Your email has been sent to support! Someone should be in touch! If your matter is urgent please come back into chat.
Chat Hours:
Monday - Friday, 8:30am to 6pm ET
Thank you for your feedback!
Please fill out the form again to start a new chat.
All agents are currently offline.
Chat Hours:
Monday - Friday
8:30AM - 6PM EST
To contact us please fill out this form and we will contact you via email.