void DemoLoadImageBitsFromFile (HANDLE hLcWnd)
{
WCHAR* szName = L"Image3";
WCHAR* szFileName = L"c:/!OK/Data/Images/Fish.bmp";
HANDLE hImage, hImgRef, hBlock, hDrw;
double X, Y, W, H;
WIN32_FIND_DATAW ffd;
HANDLE hff;
FILE* df;
UINT fsize;
BYTE* pDataBuf = 0; // pointer to a DIB in a memory
bool bLoaded = false;
// get file size
hff = FindFirstFile( szFileName, &ffd );
if (hff == INVALID_HANDLE_VALUE){
// the file don't exist
return;
}
fsize = ffd.nFileSizeLow;
FindClose( hff );
// allocate memory
pDataBuf = (BYTE*)malloc( fsize );
if (pDataBuf){
df = _wfopen( szFileName, L"rb" );
if (df){
// copy file into memory buffer
if (fread( pDataBuf, fsize, 1, df ) == 1){
// now the image file is stored in a memory
bLoaded = true;
}
fclose( df );
}
}
if (bLoaded){
// get drawing and block, linked with CAD window
hDrw = lcPropGetHandle( hLcWnd, LC_PROP_WND_DRW );
hBlock = lcPropGetHandle( hLcWnd, LC_PROP_WND_BLOCK );
// create image from memory buffer data
hImage = lcDrwAddImage3( hDrw, szName, pDataBuf );
if (hImage){
// add first image reference
X = 30.0; // left-bottom position of the image reference
Y = 50.0;
W = 100.0; // width of the image reference
H = 0.0; // real height will be calculated from the image proportions
hImgRef = lcBlockAddImageRef( hBlock, hImage, X, Y, W, H, false );
// update entity's extents
lcEntUpdate( hImgRef );
// get height of the image reference
H = lcPropGetFloat( hImgRef, LC_PROP_ENT_DY );
// add second image reference
X = X + (W * 0.75);
Y = Y + (H * 0.75);
W = W * 0.5;
H = 0.0;
hImgRef = lcBlockAddImageRef( hBlock, hImage, X, Y, W, H, false );
// view drawing's extents
lcWndZoomRect( hLcWnd, 0,0,0,0 );
}
}
// free memory
free( pDataBuf );
}