?
Solved

Running in Emulator. But not in Device.

Posted on 2002-04-19
9
Medium Priority
?
465 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
Want to be a Web Developer? Get Certified Today!

Enroll in the Certified Web Development Professional course package to learn HTML, Javascript, and PHP. Build a solid foundation to work toward your dream job!

 

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 200 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

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

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

In this article we will discuss all things related to StageFright bug, the most vulnerable bug of android devices.
In this post we will learn how to make Android Gesture Tutorial and give different functionality whenever a user Touch or Scroll android screen.
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…
Suggested Courses
Course of the Month11 days, 5 hours left to enroll

770 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