Image getting corrupt

A

apoorv

Hi guys,
I am writing a imaging aplication on VC++.I have to display images and
apply effects onto it.Images could be of any type like
jpg,gif,bmp,psd...
I am using createDibSection API.it requires BITMAPINFO struc as one of
its parameters.Its working well(Images are successfully displayed) but
my problem is that in certain images(of any type)they are skewed and
becomes B/W(means Data corruption).U can see my code of populating
BITMAPINFO and CreateDibSection...Can any body help me in solving the
annoying probs.
[Note:If I am changing the dimension of image by few pixels using
photoshop resultant image is displayed well.]

BITMAPINFO bmi;

bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biBitCount = 24; bmi.bmiHeader.biWidth
= swidth;//Image width
bmi.bmiHeader.biHeight = -sheight;//Image Height
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biCompression =
BI_RGB; //uncompressed bmi.bmiHeader.biSizeImage =
0; bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;
bmi.bmiColors[0].rgbBlue = 0;
bmi.bmiColors[0].rgbRed = 0;
bmi.bmiColors[0].rgbGreen = 0;
bmi.bmiColors[0].rgbReserved = 0;


hBmp = CreateDIBSection( hdc_
, &bmi
, DIB_RGB_COLORS
, &imageBuff //pointerto created buf
, NULL
, 0);

dcMem = ::CreateCompatibleDC(hdc_);//creates a memory compatible
device context (DC)passing exixting DC
(HBITMAP) ::SelectObject(dcMem, hBmp); //selects handle of image
toDevice
 
S

Severian

Hi guys,
I am writing a imaging aplication on VC++.I have to display images and
apply effects onto it.Images could be of any type like
jpg,gif,bmp,psd...
I am using createDibSection API.it requires BITMAPINFO struc as one of
its parameters.Its working well(Images are successfully displayed) but
my problem is that in certain images(of any type)they are skewed and
becomes B/W(means Data corruption).U can see my code of populating
BITMAPINFO and CreateDibSection...Can any body help me in solving the
annoying probs.
[Note:If I am changing the dimension of image by few pixels using
photoshop resultant image is displayed well.]

Scan lines must be multiples of 4 bytes.

So, for a 3-pixel wide 24-bit BGR image, each scanline will be 12
bytes, the last 3 unused.

Here's an easy way to calculate the required width of a row for a
specific width and bits-per-pixel:

scanwid = (((width * bpp + 7) / 8) + 3) & ~3;

Of course, to create the number of bytes required for the image data,
you need to multiply this scanwid by the image height.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

Image.FromHbitmap problem 0

Top