Storing "Paint Brush" images in a Access DB | CodeGuru

Storing “Paint Brush” images in a Access DB

This example demonstrates how to store a “Paint Brush” image in a Access DB. In my code I have created a CDaoRecordset derived class for handling and reading the binary data. Class Wizard binds a CLongBinary to the Ole Object field when creating the recordset. CLongBinary is difficult to manage, so in the recordset, that […]

Written By
CodeGuru Staff
CodeGuru Staff
Mar 1, 1999
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

This example demonstrates how to store a “Paint Brush” image in a Access DB.
In my code I have created a CDaoRecordset derived class for handling and reading the binary data.
Class Wizard binds a CLongBinary to the Ole Object field when creating the recordset.
CLongBinary is difficult to manage, so in the recordset, that is to receive the binary
data, I bind a CByteArray variable to the field.

Example :

::DoFieldExchange(CDaoFieldExchange* pFX)

DFX_LongBinary(pFX, _T("[Images]"), m_Images);

become

DFX_Binary(pFX, _T("[Images]"), m_Images);

In CDAORecordSet the public member “CLongBinary m_Images” become “CByteArray m_Images”

The function code is :

BOOL CBLOBSDlg::ReadFromBLOB(CByteArray & DBArray)
{
  CByteArray Array;
  Array.Copy( DBArray);
  // the header of BLOB is OLE stuff like "Paint Brush Application" .... ecc.. 
  // the len is 78 byte ( I do not know for other headers ) 
  int HeaderLen =   78 + sizeof(BITMAPFILEHEADER);
  Array.RemoveAt( 0, HeaderLen ); // I cut all Headers 

  // some BMP information 
  BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)Array.GetData() ;
  BITMAPINFO &bmInfo = *(LPBITMAPINFO)Array.GetData() ;


  // If bmiHeader.biClrUsed is zero we have to infer the number 
  // of colors from the number of bits used to specify it. 
  int nColors = bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 << bmiHeader.biBitCount;

  LPVOID lpDIBBits;
  if( bmInfo.bmiHeader.biBitCount > 8 )
      lpDIBBits = (LPVOID)((LPDWORD)(bmInfo.bmiColors + bmInfo.bmiHeader.biClrUsed) +
                        ((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
  else
      lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);


  CClientDC dc(NULL);

  HBITMAP hBmp = CreateDIBitmap( dc.m_hDC,   // handle to device context 
                                 &bmiHeader,     // pointer to bitmap size and format data 
                                 CBM_INIT,       // initialization flag 
                                 lpDIBBits,      // pointer to initialization data 
                                 &bmInfo,        // pointer to bitmap color-format data 
                                 DIB_RGB_COLORS);                // color-data usage 

  OleBmp.Attach( hBmp );

  Array.RemoveAll(); //Relese Memory 

  return TRUE;
}

Note:

1: In the example the DB path in “CString CDaoRecorset::GetDefaultDBName()” must be changed!!

2: This code is for VC++ 5

Download source – 36KB

Update regarding storing a BLOB in an Access DB:

Download Project including saving BLOB – 60 KB

Date updated : 12 Feb. 1999

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.