• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 467
  • Last Modified:

Running in Emulator. But not in Device.

Hi,
I tired a program using createDIBSection and tried to fill that buffer.This buffer contains pixel information of a bitmap..My code works smoothily in my evc emulator..But when i tried it in my pocketPC the allocating of buffer is not working..Y this happend?


Main parts of my code is

//**************/
//Bitmap information
bitmapinfo.bmiHeader.biWidth=screenWidth  ;
     bitmapinfo.bmiHeader.biHeight=-screenHeight;
     bitmapinfo.bmiHeader.biPlanes=1;
     bitmapinfo.bmiHeader.biBitCount=32;
     bitmapinfo.bmiHeader.biCompression=BI_RGB;
     bitmapinfo.bmiHeader.biSizeImage=0;
     bitmapinfo.bmiHeader.biClrUsed=0;
     bitmapinfo.bmiHeader.biClrImportant=256;


//CreateDIBSection
COLORREF pBuffer ;
 pBuffer = (COLORREF*)calloc((screenWidth * screenHeight*3 + 1000) ,sizeof(int));
     hTargetBitmap =     CreateDIBSection(hDC,&bitmapinfo,DIB_RGB_COLORS,(void**)&pBuffer,NULL,0);
     pDC=CreateCompatibleDC(hDC);
     HBITMAP old=(HBITMAP)SelectObject(pDC,hTargetBitmap);
DeleteDC(hDC);

//Fillimg Buffer
COLORREF convertTo24 = convertColor24(pixcolor);
int j=0;
for( int l = 1; l <= count; l++)
{
 pBuffer[j++] = convertTo24;
}

My problem is when I run my program in my device(Compaq ipac ) the value of convertTo24 is not assigned to pBuffer for not even a single time...:(..Funny thing is its works fine in my default emulator..
Pls help me..
Sujeesh


0
sujeeshlal
Asked:
sujeeshlal
  • 5
  • 4
1 Solution
 
chensuCommented:
Remove the following three lines.

pDC=CreateCompatibleDC(hDC);
HBITMAP old=(HBITMAP)SelectObject(pDC,hTargetBitmap);
DeleteDC(hDC);

First, it is wrong because you select a bitmap into a DC and then delete the DC without selecting the old bitmap back. Second, you don't need to select the bitmap into a DC before filling the buffer.
0
 
sujeeshlalAuthor Commented:
Hi, thanx for ur help..But Now only I noticed a strange error in createDIBsection as showing 'invalid parameter' when I run it in Device..Its OK when I run it in Default emulator..Pls help me..
0
 
chensuCommented:
1. You need to set the biSize member before calling CreateDIBSection().

bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

2. The data type of pBuffer should be a pointer.

COLORREF *pBuffer;
0
New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

 
sujeeshlalAuthor Commented:
I did both ..But in vain.:((
0
 
chensuCommented:
So, which function is failing now? What is the error code?
0
 
sujeeshlalAuthor Commented:
createDIBSection is failed as "invalid parameter" error code 87..But if i run that program in my WINCE default emulator its works fine..plss help..
0
 
chensuCommented:
From Windows CE documentation,

"For 16bpp or 32bpp non-palettized images, the color table must be three entries long; the entries must specify the values of the red, green, and blue bitmasks. Also, the biCompression field in the BITMAPINFOHEADER structure should be set to BI_BITFIELDS. BI_RBG is not supported for these bit depths."

I never use an emulator to develop CE applications. Always use a real CE device.
0
 
sujeeshlalAuthor Commented:
Haaai, Thaaanx a lot.Atlast I got my screen.I changed the biCompression to BI_BITFIELDS and its works..still there is some color problems in my bitmap..Anyway thaaaanx a lot for ur great information..Im really thrilled with that answer.
0
 
chensuCommented:
I believe that the color problems are due to the incorrect mask.

"If the biCompression member of the BITMAPINFOHEADER is BI_BITFIELDS, the bmiColors member contains three DWORD color masks that specify the red, green, and blue components, respectively, of each pixel. Each DWORD in the bitmap array represents a single pixel."
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 5
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now