Solved

Running in Emulator. But not in Device.

Posted on 2002-04-19
9
464 Views
Last Modified: 2013-12-27
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
Comment
Question by:sujeeshlal
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
9 Comments
 
LVL 23

Expert Comment

by:chensu
ID: 6954893
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
 

Author Comment

by:sujeeshlal
ID: 6959464
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
 
LVL 23

Expert Comment

by:chensu
ID: 6960776
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
Enroll in June's Course of the Month

June's Course of the Month is now available! Every 10 seconds, a consumer gets hit with ransomware. Refresh your knowledge of ransomware best practices by enrolling in this month's complimentary course for Premium Members, Team Accounts, and Qualified Experts.

 

Author Comment

by:sujeeshlal
ID: 6964971
I did both ..But in vain.:((
0
 
LVL 23

Expert Comment

by:chensu
ID: 6966796
So, which function is failing now? What is the error code?
0
 

Author Comment

by:sujeeshlal
ID: 6967558
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
 
LVL 23

Accepted Solution

by:
chensu earned 50 total points
ID: 6967608
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
 

Author Comment

by:sujeeshlal
ID: 6967912
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
 
LVL 23

Expert Comment

by:chensu
ID: 6969568
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: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I recently asked a question (http://www.experts-exchange.com/Programming/Smartphones/Android/Q_28684946.html) about Computer Inventory applications for Mobile Devices.  I was specifically interested in an app I could use on my android phone.  The be…
As the title indicates, I have done this before. It chills me everytime I update the OS on my phone, (http://www.experts-exchange.com/articles/18084/Upgrading-to-Android-5-0-Lollipop.html) because one time I did this and I essentially had a bricked …
This video Micro Tutorial shows how to password-protect PDF files with free software. Many software products can do this, such as Adobe Acrobat (but not Adobe Reader), Nuance PaperPort, and Nuance Power PDF, but they are not free products. This vide…
Monitoring a network: why having a policy is the best policy? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the enormous benefits of having a policy-based approach when monitoring medium and large networks. Software utilized in this v…

688 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question