Click here to Skip to main content
15,923,226 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralImage processing in visual c++. Work with bmp images. Pin
Jose Luis20-Apr-01 23:59
Jose Luis20-Apr-01 23:59 
GeneralRe: Image processing in visual c++. Work with bmp images. Pin
l a u r e n21-Apr-01 7:59
l a u r e n21-Apr-01 7:59 
GeneralRe: Image processing in visual c++. Work with bmp images. Pin
Chris Losinger21-Apr-01 8:47
professionalChris Losinger21-Apr-01 8:47 
GeneralRe: Image processing in visual c++. Work with bmp images. Pin
22-Apr-01 2:55
suss22-Apr-01 2:55 
GeneralThanks but....Re: Image processing in visual c++. Work with bmp images. Pin
Jose Luis26-Apr-01 23:15
Jose Luis26-Apr-01 23:15 
GeneralRe: Thanks but....Re: Image processing in visual c++. Work with bmp images. Pin
l a u r e n27-Apr-01 2:50
l a u r e n27-Apr-01 2:50 
QuestionPlease help... how can I insert a bmp image in a DAO database field? Pin
Jose Luis20-Apr-01 23:53
Jose Luis20-Apr-01 23:53 
AnswerRe: Please help... how can I insert a bmp image in a DAO database field? Pin
Masaaki Onishi22-Apr-01 5:41
Masaaki Onishi22-Apr-01 5:41 
Hello, the codegurus around the world.;)

I remebered to read some article for this in MSDN help,
so I try to find this.
Unfortunately, I didn't find the same one, but found some tips.

I don't know how to convert bitmap file to BYTE format,
but I expect that this will help you?

HOWTO: Accessing Binary Data Using dbDao 

--------------------------------------------------------------------------------
The information in this article applies to:

Microsoft Visual C++, 32-bit Editions, versions 4.0, 4.1, 4.2, 4.2b, 5.0, 6.0

--------------------------------------------------------------------------------


SUMMARY
When using the DAO SDK C++ classes to access binary data (such as a bitmap) you will find 
that the data is returned in a COleVariant. COleVariant is an MFC class that wraps the 
OLE VARIANT data type. Within the VARIANT, the data is stored as an OLE SAFEARRAY.

Extracting the binary data from the COleVariant requires some knowledge of VARIANTs and 
SAFEARRAYs. The sample code below illustrates how to work with these data types by providing
a function for extracting binary data from a COleVariant and a function for storing binary data in a COleVariant. 



MORE INFORMATION

Sample Code

   //Extensive error checking is left out to make the code more readable

   BOOL GetBinaryFromVariant(COleVariant & ovData, BYTE ** ppBuf,
                                unsigned long * pcBufLen)
   {
     BOOL fRetVal = FALSE;

   //Binary data is stored in the variant as an array of unsigned char
     if(ovData.vt == (VT_ARRAY|VT_UI1))  // (OLE SAFEARRAY)
     {
       //Retrieve size of array
       *pcBufLen = ovData.parray->rgsabound[0].cElements;

       *ppBuf = new BYTE[*pcBufLen]; //Allocate a buffer to store the data
       if(*ppBuf != NULL)
       {
         void * pArrayData;

         //Obtain safe pointer to the array
         SafeArrayAccessData(ovData.parray,&pArrayData);

         //Copy the bitmap into our buffer
         memcpy(*ppBuf, pArrayData, *pcBufLen);

         //Unlock the variant data
         SafeArrayUnaccessData(ovData.parray);
         fRetVal = TRUE;
       }
     }
     return fRetVal;
   }

   BOOL PutBinaryIntoVariant(COleVariant * ovData, BYTE * pBuf,
                                unsigned long cBufLen)
   {
     BOOL fRetVal = FALSE;

     VARIANT var;
     VariantInit(&var);  //Initialize our variant

     //Set the type to an array of unsigned chars (OLE SAFEARRAY)
     var.vt = VT_ARRAY | VT_UI1;

     //Set up the bounds structure
     SAFEARRAYBOUND  rgsabound[1];

     rgsabound[0].cElements = cBufLen;
     rgsabound[0].lLbound = 0;

     //Create an OLE SAFEARRAY
     var.parray = SafeArrayCreate(VT_UI1,1,rgsabound);

     if(var.parray != NULL)
     {
       void * pArrayData = NULL;

       //Get a safe pointer to the array
       SafeArrayAccessData(var.parray,&pArrayData);

       //Copy bitmap to it
       memcpy(pArrayData, pBuf, cBufLen);

       //Unlock the variant data
       SafeArrayUnaccessData(var.parray);

       *ovData = var;  // Create a COleVariant based on our variant
       VariantClear(&var);
       fRetVal = TRUE;
     }

     return fRetVal;
   }


   //How you might call these functions

   CdbRecordset rs;

   //Code for initializing DAO and opening the recordset left out...

   COleVariant ovData = rs.GetField(_T("MyBinaryField"));

   BYTE * pBuf = NULL;
   unsigned long cBufLen;

   if(GetBinaryFromVariant(ovData,&pBuf,&cBufLen))
   {
     //Do something with binary data in pBuf...

     //Write back a new record containing the binary data

     COleVariant ovData2;
     if(PutBinaryIntoVariant(&ovData2,pBuf,cBufLen))
     {
       rs.AddNew();
       rs.SetField(_T("MyBinaryField"), ovData2); //Write our COleVariant
   to the table
       rs.Update();
     }
     //Clean up memory allocated by GetBinaryFromVariant
     if(pBuf)
       delete pBuf;
   } 

Additional query words: kbgrpMFCOLE 

Keywords : kbcode kbole kbprg kbDAO kbMFC kbVC400 kbVC500 kbVC600 
Version : winnt:4.0,4.1,4.2,4.2b,5.0,6.0 
Platform : winnt 
Issue type : kbhowto 
Technology : kbvc 

Last Reviewed: March 13, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.
 
--------------------------------------------------------------------------------
Send feedback to MSDN.Look here for MSDN Online resources. 


Have a nice day!
-Masaaki Onishi-
GeneralError in adding member variable ... Pin
Hadi Rezaee20-Apr-01 21:06
Hadi Rezaee20-Apr-01 21:06 
GeneralRe: Error in adding member variable ... Pin
Christian Graus20-Apr-01 22:49
protectorChristian Graus20-Apr-01 22:49 
GeneralRe: Error in adding member variable ... Pin
Hadi Rezaee21-Apr-01 0:26
Hadi Rezaee21-Apr-01 0:26 
QuestionDisplay Property extension? Pin
20-Apr-01 12:08
suss20-Apr-01 12:08 
AnswerRe: Display Property extension? Pin
Michael Dunn20-Apr-01 16:08
sitebuilderMichael Dunn20-Apr-01 16:08 
GeneralRe: Display Property extension? Pin
21-Apr-01 20:08
suss21-Apr-01 20:08 
GeneralCheck internet exists using win32 Pin
20-Apr-01 6:50
suss20-Apr-01 6:50 
GeneralRe: Check internet exists using win32 Pin
Masaaki Onishi21-Apr-01 3:44
Masaaki Onishi21-Apr-01 3:44 
GeneralOther Method??? Pin
Hendrik Kurniawan21-Apr-01 7:06
Hendrik Kurniawan21-Apr-01 7:06 
GeneralRe: Other Method??? Pin
Masaaki Onishi21-Apr-01 7:24
Masaaki Onishi21-Apr-01 7:24 
GeneralRe: Other Method??? Pin
Kannan Kalyanaraman22-Apr-01 1:45
Kannan Kalyanaraman22-Apr-01 1:45 
GeneralRe: I don't want to make Codeproject website slow... Pin
Masaaki Onishi22-Apr-01 4:14
Masaaki Onishi22-Apr-01 4:14 
GeneralDLL - statically linking code Pin
#realJSOP20-Apr-01 5:27
professional#realJSOP20-Apr-01 5:27 
GeneralRe: DLL - statically linking code Pin
Chris Losinger20-Apr-01 7:44
professionalChris Losinger20-Apr-01 7:44 
GeneralStructure posting Pin
yamini20-Apr-01 0:34
yamini20-Apr-01 0:34 
GeneralRe: Structure posting Pin
Jeff Naber20-Apr-01 8:43
Jeff Naber20-Apr-01 8:43 
GeneralRe: Structure posting Pin
Jeff Naber23-Apr-01 5:14
Jeff Naber23-Apr-01 5:14 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.