Total members 11894 |It is currently Sat Nov 23, 2024 9:09 am Login / Join Codemiles

Java

C/C++

PHP

C#

HTML

CSS

ASP

Javascript

JQuery

AJAX

XSD

Python

Matlab

R Scripts

Weka





hello,

I need to read a grey-scale bitmap image using C++ , i have the code below but it works with some images while it reports error for other images.
I know that something goes wrong with reading in this line
Code:
if (fread(&grey,sizeof(char),1,fptr) != 1)


but i've no idea what is it ?
Can you help me please ?

cpp code
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include <iostream.h>
// bitmap header structs
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif

//#include "paulslib.h"

/*
Sample program to read a limited number of BMP file types
Write out lots of diagnostics
Write out a 24 bit RAW image file
*/

typedef struct {
unsigned short int type; /* Magic identifier */
unsigned int size; /* File size in bytes */
unsigned short int reserved1, reserved2;
unsigned int offset; /* Offset to image data, bytes */
} HEADER;
typedef struct {
unsigned int size; /* Header size in bytes */
int width,height; /* Width and height of image */
unsigned short int planes; /* Number of colour planes */
unsigned short int bits; /* Bits per pixel */
unsigned int compression; /* Compression type */
unsigned int imagesize; /* Image size in bytes */
int xresolution,yresolution; /* Pixels per meter */
unsigned int ncolours; /* Number of colours */
unsigned int importantcolours; /* Important colours */
} INFOHEADER;
typedef struct {
unsigned char r,g,b,junk;
} COLOURINDEX;
// functions used for reading bitmap
/*
Read a possibly byte swapped unsigned short integer
*/
int ReadUShort(FILE *fptr,short unsigned *n,int swap)
{
unsigned char *cptr,tmp;

if (fread(n,2,1,fptr) != 1)
return(FALSE);
if (swap) {
cptr = (unsigned char *)n;
tmp = cptr[0];
cptr[0] = cptr[1];
cptr[1] =tmp;
}
return(TRUE);
}

/*
Read a possibly byte swapped unsigned integer
*/
int ReadUInt(FILE *fptr,unsigned int *n,int swap)
{
unsigned char *cptr,tmp;

if (fread(n,4,1,fptr) != 1)
return(FALSE);
if (swap) {
cptr = (unsigned char *)n;
tmp = cptr[0];
cptr[0] = cptr[3];
cptr[3] = tmp;
tmp = cptr[1];
cptr[1] = cptr[2];
cptr[2] = tmp;
}
return(TRUE);
}
// end functions used for reading bitmap

int main(int argc,char **argv)
{
int i,j;
int gotindex = FALSE;
char grey,r,g,b;
HEADER header;
INFOHEADER infoheader;
COLOURINDEX colourindex[256];
FILE *fptr;

/* Check arguments */
if (argc < 2) {
fprintf(stderr,"Usage: %s filename\n",argv[0]);
exit(-1);
}

/* Open file */
if ((fptr = fopen(argv[1],"r")) == NULL) {
fprintf(stderr,"Unable to open BMP file \"%s\"\n",argv[1]);
exit(-1);
}



/* Read and check the header */
ReadUShort(fptr,&header.type,FALSE);
fprintf(stderr,"ID is: %d, should be %d\n",header.type,'M'*256+'B');
ReadUInt(fptr,&header.size,FALSE);
fprintf(stderr,"File size is %d bytes\n",header.size);
ReadUShort(fptr,&header.reserved1,FALSE);
ReadUShort(fptr,&header.reserved2,FALSE);
ReadUInt(fptr,&header.offset,FALSE);
fprintf(stderr,"Offset to image data is %d bytes\n",header.offset);

/* Read and check the information header */
if (fread(&infoheader,sizeof(INFOHEADER),1,fptr) != 1) {
fprintf(stderr,"Failed to read BMP info header\n");
exit(-1);
}
fprintf(stderr,"Image size = %d x %d\n",infoheader.width,infoheader.height);
fprintf(stderr,"Number of colour planes is %d\n",infoheader.planes);
fprintf(stderr,"Bits per pixel is %d\n",infoheader.bits);
fprintf(stderr,"Compression type is %d\n",infoheader.compression);
fprintf(stderr,"Number of colours is %d\n",infoheader.ncolours);
fprintf(stderr,"Number of required colours is %d\n",
infoheader.importantcolours);

/* Read the lookup table if there is one */
for (i=0;i<255;i++) {
colourindex[i].r = rand() % 256;
colourindex[i].g = rand() % 256;
colourindex[i].b = rand() % 256;
colourindex[i].junk = rand() % 256;
}
if (infoheader.ncolours > 0) {
for (i=0;i<infoheader.ncolours;i++) {
if (fread(&colourindex[i].b,sizeof(unsigned char),1,fptr) != 1) {
fprintf(stderr,"Image read failed 1 \n");
exit(-1);
}
if (fread(&colourindex[i].g,sizeof(unsigned char),1,fptr) != 1) {
fprintf(stderr,"Image read failed 2 \n");
exit(-1);
}
if (fread(&colourindex[i].r,sizeof(unsigned char),1,fptr) != 1) {
fprintf(stderr,"Image read failed 3 \n");
exit(-1);
}
if (fread(&colourindex[i].junk,sizeof(unsigned char),1,fptr) != 1) {
fprintf(stderr,"Image read failed 4 \n");
exit(-1);
}
fprintf(stderr,"%3d\t%3d\t%3d\t%3d\n",i,
colourindex[i].r,colourindex[i].g,colourindex[i].b);
}
gotindex = TRUE;
}

/* Seek to the start of the image data */
fseek(fptr,header.offset,SEEK_SET);

/* Read the image */
for (j=0;j<infoheader.height;j++) {
for (i=0;i<infoheader.width;i++) {

if (infoheader.bits== 8) {

if (fread(&grey,sizeof(char),1,fptr) != 1) {
fprintf(stderr,"Image read failed 6 %s \n",&grey);
exit(-1);
}
if (gotindex) {
fprintf(stderr,"indexed\n");
putchar(colourindex[grey].r);
putchar(colourindex[grey].g);
putchar(colourindex[grey].b);
} else {

putchar(grey);
}
}
else
{
fprintf(stderr,"Not Grey Scale Image !!");
return 0;
}



} /* i */
} /* j */

fclose(fptr);
return 0;
}


Note: this code was supposed to read colored & grey-scaled images but I modified it to read gray-scale only , original code is here : http://local.wasp.uwa.edu.au/~pbourke/dataformats/bmp/parse.c

Thnx in advanced :)




Author:
Newbie
User avatar Posts: 2
Have thanks: 0 time

i probably should delete this post of yours anyway ..first of all read the fucking code before making a copy paste read the comments look the code you provided to us the original one ..
you problem solves bmp images restricted and you make it to work only with greyscale images that meant that the images are 8-bit when you import an image non bmp and more then 8 bit it wont work ..it is simple logicil you dont know what kind of restriction you put in your code and you expect me to sit and look throught your homework task ..?doesnt look like a silly thing to you ..
if (infoheader.bits== 8) for example why you put this? you can understand it?
its like telling me take a car and drive it but you know there is no fuel in it how you ll drive it?


Author:
Moderator
User avatar Posts: 47
Have thanks: 1 time

plus you want to make codes that have to do with images use matlab ..


Author:
Moderator
User avatar Posts: 47
Have thanks: 1 time

When I decrease the opacity of the pencil sketch layer it makes the sketch lines look faded and when I increase its opacity, the white in the sketch layer makes the colours of the airbrush layer look washed out. Is a compromise between the two the only way I'm going to be able to manage this?


Author:
Newbie
User avatar Posts: 29
Have thanks: 0 time

probably you should find the right combination in order to have the best result..in my ocasio it was about 30% 25% 25% 20%
somehow like that ..:)


Author:
Moderator
User avatar Posts: 47
Have thanks: 1 time
Post new topic Reply to topic  [ 5 posts ] 

  Related Posts  to : help reading greyscaled image !
 Reading the all file in php     -  
 Multithreaded File Reading     -  
 Java Object Reading     -  
 Reading file with integers     -  
 Reading email in Python     -  
 Reading a Specific Character in php     -  
 Parsing and Reading RSS feeds     -  
 Reading and Writing To text file     -  
 Earn $5000 for reading emails     -  
 Reading selected data from a source file     -  



Topic Tags

C++ Files and I/O






Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
All copyrights reserved to codemiles.com 2007-2011
mileX v1.0 designed by codemiles team
Codemiles.com is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to Amazon.com