#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <malloc.h>
#include <process.h>
#include <signal.h>
#include <unistd.h>
#include "graymorf.h"

using namespace std;

//Allocate memory for file
unsigned char **imalloc(int numlines, int numbytes)
{
         unsigned char **iptr;
         short i;
         iptr=(unsigned char **)malloc(numlines * sizeof(unsigned 
char *));
         if(iptr==NULL)
         {
             fprintf(stderr, "Memory allocation failed: Aborting");
             exit(255);
         }
         iptr[0]=(unsigned char *)malloc(numlines*numbytes*sizeof
(unsigned char));
         if(iptr[0]==NULL)
         {
             fprintf(stderr, "Memory allocation failed: Aborting");
             exit(255);
         }
         for(i=1; i<numlines; i++)
                  iptr[i]=iptr[i-1]+numbytes;
         return iptr;
}

//This function will display the image in irfanview
int irfanviewDisp(char *file, int pos)
{
    char cmdLine[100], buf[2];
    strcpy(cmdLine, "C:\\Program Files\\Irfanview\\i_view32.exe");
    char position[100], value[30];
    strcpy(position, "/pos=(");
    sprintf(value, "%d", pos);
    strcat(position, value);
    strcat(position, ",");
    strcat(position, value);
    strcat(position, ")");
    cout << position << endl;
    return spawnl(_P_NOWAIT, cmdLine, "iv.exe", file, position, NULL);
}
    
//Bitmap File Header    
typedef struct tagBITMAPFILEHEADER 
{ 
        unsigned short int bfType;              //specifies the file 
type
        unsigned int bfSize;                    //Specifies the size 
in bytes of the bitmap file
        unsigned short int bfReserved1, bfReserved2;  //reserved, 
both must be zero
        unsigned int bfOffset;                  //specifies the 
offset in bytes from BMFH to bmp bits
} BITMAPFILEHEADER;

//Bitmap Info Header
typedef struct tagBITMAPINFOHEADER
{ 
        unsigned int biSize;      //specifies the number of bytes 
required byby the struct 
        int biWidth, biHeight;    //sepcifies the width and height in 
pixels
        unsigned short int biPlanes;  //specifies the number of color 
planes, must be 1
        unsigned short int biBits;    //specifies the number of bits 
per pixel
        unsigned int biCompression;   //specifies the type of 
compression
        unsigned int biImagesize;     //size of image in bytes
        int biXResolution, biYResolution;    //number of pixels per 
meter in xand y axis
        unsigned int binColors;              //number of colors used 
by the bitmap
        unsigned int biImportantcolors;      //number of colors that 
are important
}BITMAPINFOHEADER;

unsigned char *DisplayProcessedBitmap(char *filename, 
BITMAPINFOHEADER *bitmapInfoHeader)
{
         FILE *fp;
         BITMAPFILEHEADER bitmapFileHeader;
         unsigned char *bitmapImage;
         int imageIdx=0;
         unsigned char tempRGB;
         
         fp=fopen(filename, "rb");
         if(fp==NULL)
                     return NULL;
         
         fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER),1,fp);
         
         if(bitmapFileHeader.bfType!=0x4d42)
         {
              fclose(fp);
              return NULL;
         }
         fread(bitmapInfoHeader, sizeof(bitmapInfoHeader),1,fp);
         
         fseek(fp, bitmapFileHeader.bfOffset, SEEK_SET);
         
         bitmapImage=(unsigned char*)malloc(bitmapInfoHeader-
>biImagesize);
         
         if(!bitmapImage)
         {
              free(bitmapImage);
              fclose(fp);
              return NULL;
         }
         
//           fread(bitmapImage, bitmapInfoHeader->biImagesize, fp)

           //if(bitmapImage==NULL)
           {
                fclose(fp);
                return NULL;
           }
           
           for(imageIdx=0; imageIdx<bitmapInfoHeader->biImagesize; 
imageIdx+3)
           {
                           tempRGB=bitmapImage[imageIdx];
                           bitmapImage[imageIdx]=bitmapImage
[imageIdx+2];
                           bitmapImage[imageIdx+2]=tempRGB;
           }
           
           //Process the pixels in the BMP
           image r,g,b;
           image *newFile;
           image &d=*newFile;
           for(int i=0; i<r.numLines; i++)
           {
              for(int j=0; j<r.numPix; j++)
              {
                  (int)d.buf[i][j]=(((int)r.buf[i][j])-((int)g.buf[i]
[j]+(int)b.buf[i][j])/2)+128;
              }
      }      
           
           fclose(fp);
           return bitmapImage;
}        

/*//d=new image being created
//r=red pixels
//g=green pixels
//b=blue pixels
image enhanceRed(char *filename, image &d, image r, image g, image b)
{
      image out=createImage(d);
      for(int i=0; i<r.numLines; i++)
      {
              for(int j=0; j<r.numPix; j++)
              {
                  (int)d.buf[i][j]=(((int)r.buf[i][j])-((int)g.buf[i]
[j]+(int)b.buf[i][j])/2)+128;
              }
      }      
      return out;
}*/ 
    
int main(int argc, char *argv[])
{
    BITMAPINFOHEADER bitmapInfoHeader;
    DisplayProcessedBitmap("image.bmp", &bitmapInfoHeader);// image 
is our file name
    irfanviewDisp("image.bmp",200);
    system("PAUSE");
    return EXIT_SUCCESS;
}

//Grayscale Morphology Header File
// this is graymorf.h
#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))

#define DILATE_VALUE 0
#define ERODE_VALUE 255

struct image {
       unsigned char ** buf;
       int numLines, numPix;
};

struct intImage {
       int ** buf;
       int numLines, numPix;
};

struct floatImage {
       float ** buf;
       int numLines, numPix;
};

unsigned char **imalloc(int numlines, int numbytes);

//Free 2-D memory arrays
void free_image(unsigned char **im_buf);
void free_image(int **im_buf);
void free_image(float **im_buf);

image createImage(image source);

int createImage(int numLines, int numPix); //Overloading
image createIntImage(int numLines, int numPix);
image createFloatImage(int numLines, int numPix);

image createImage(int numLines, int numPix, unsigned char **buf); 

void deleteImage(image &img);

void kim(image &im1, image &im2, image &im3, image &im4, image &im5);

void kim(image &im1, image &im2, image &im3, image &im4);

void kim(image &im1, image &im2, image &im3);

void kim(image &im1, image &im2);

void kim(image &im1); //Overload for 1 arg

bool swapImBufs(image &one, image &two);

image copybuf(image source);

void fix_border(image in, image out);

void dilateV(image in, image out);

void dilateH(image in, image out);

void dilateS1(image in, image out);

void dilateS2(image in, image out);

void erodeV(image in, image out);

void erodeH(image in, image out);

void erodeS1(image in, image out);

void erodeS2(image in, image out);

image sqDilate(image in, int iter);

image sqErode(image in, int iter);

image imSubtract(image image1, image image2);

image octErode(image in, int iter);

image octDilate(image in, int iter);

image octCLose(image in, int iter);

image octOpen(image in, int iter);

//Save an image buffer to a PGM fiel
int writePGM(char *fname, image save);

//Create image buffer and load with data from PGM file
image readPGM(char *fname);

image rectDilate(image in, int hiter, int viter);

image rectErode(image in, int hiter, int viter);

image rectOpen(image in, int hiter, int viter);

image rectClose(image in, int hiter, int viter);

image imAnd(image image1, image image2);

int otsu(image img, int border);

image imThresh(image in, int thresh);





hopefully u can help us out this is our source code we can display it 
but we need to process it we believe we can process it using some of 
that code but we not sure cause we can display the new image
thanks


--- In c-prog@yahoogroups.com, "krome152001" <[EMAIL PROTECTED]> wrote:
>
> i was wondering if any one can help me out on writting the code to 
> find the pixels value of a bmp image to see if it has a color(red) 
in 
> the image??? or how to access the pixel of the image ??? anyone 
would 
> be helpful
> thanks
>


Reply via email to