Solved

Running in Emulator. But not in Device.

Posted on 2002-04-19
9
459 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
  • 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
 

Author Comment

by:sujeeshlal
ID: 6964971
I did both ..But in vain.:((
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Preface: This article is part of a series focused on cross platform mobile app development (specifically Android and iOS) using the Alloy framework and Titanium Studio made by Appcelerator (https://www.appcelerator.com/). This article presumes a wor…
Once again I push the limits of my phone.  An introduction to the Android Google Now Launcher.
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…

920 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

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now