Total members 9951 | Gratitudes |It is currently Sat Feb 11, 2012 9:00 am Login / Join Codemiles


All times are UTC [ DST ]




Post new topic Reply to topic  Quick reply  [ 5 posts ] 
Author Question
 Question subject: help reading greyscaled image !
PostPosted: Wed Jun 10, 2009 12:40 pm 
Offline
Newbie
User avatar

Joined: Wed Apr 18, 2007 7:26 am
Posts: 2
Has thanked: 0 time
Have thanks: 0 time

hello,

I need to read a greyscale 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 ?

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 coloured & greyscaled images but I modified it to read grayscale only , original code is here : http://local.wasp.uwa.edu.au/~pbourke/dataformats/bmp/parse.c

Thnx in advanced :)


TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: help reading greyscaled image !
PostPosted: Wed Jul 08, 2009 12:47 am 
Offline
Moderator
User avatar

Joined: Fri Nov 21, 2008 6:18 pm
Posts: 51
Location: thessaloniki
Has thanked: 0 time
Have thanks: 2 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?

_________________
if you want make an effort yourself no one will make it for you...
best regards


TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: help reading greyscaled image !
PostPosted: Wed Jul 08, 2009 12:50 am 
Offline
Moderator
User avatar

Joined: Fri Nov 21, 2008 6:18 pm
Posts: 51
Location: thessaloniki
Has thanked: 0 time
Have thanks: 2 time
plus you want to make codes that have to do with images use matlab ..

_________________
if you want make an effort yourself no one will make it for you...
best regards


TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: help reading greyscaled image !
PostPosted: Thu Jul 09, 2009 5:47 am 
Offline
Newbie
User avatar

Joined: Wed Apr 15, 2009 7:18 am
Posts: 32
Has thanked: 0 time
Have thanks: 0 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?

_________________
MySpace Layouts


TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: help reading greyscaled image !
PostPosted: Wed Jul 22, 2009 5:16 pm 
Offline
Moderator
User avatar

Joined: Fri Nov 21, 2008 6:18 pm
Posts: 51
Location: thessaloniki
Has thanked: 0 time
Have thanks: 2 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 ..:)

_________________
if you want make an effort yourself no one will make it for you...
best regards


TOP
 Profile Send private message  
Reply with quote  
Post new topic Reply to topic Quick reply  [ 5 posts ] 
Quick reply


  


 Similar topics
 Topic title   Forum   Author   Comments 
 put image on button in C#  Csharp examples  msi_333  2
 Hide the background image by one click  HTML examples  msi_333  0
 background-image Anchor in header links  HTML examples  msi_333  0
 crop image in java  Java examples  msi_333  2
 cfa image  Java  Anonymous  0

All times are UTC [ DST ]


Users browsing similar posts

Users browsing this forum: No registered users and 1 guest



Jump to:  
Previous Question | Next Question 




Home
General Talks
Finished Projects
Code Library
Games
Tutorials

Java
C/C++
C-sharp
php
Script
JSP/Servlets
Ajax
ASP/ASP.net
Google SEO
Database
Communications
Phpbb3 styles
Photoshop tutorials
Flash tutorials
Find a job






Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
All copyrights reserved to codemiles.com 2007-2011
mileX v1.0 designed by codemiles team