summaryrefslogtreecommitdiffstats
path: root/SD-VBS/common/c/readImage.c
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/common/c/readImage.c')
-rw-r--r--SD-VBS/common/c/readImage.c112
1 files changed, 112 insertions, 0 deletions
diff --git a/SD-VBS/common/c/readImage.c b/SD-VBS/common/c/readImage.c
new file mode 100644
index 0000000..a4dd990
--- /dev/null
+++ b/SD-VBS/common/c/readImage.c
@@ -0,0 +1,112 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9I2D* readImage(const char* pathName)
10{
11 // Reading BMP image
12 char signature[2];
13 int file_size;
14 short int reserved1;
15 short int reserved2;
16 int loc_of_bitmap;
17
18 int size_of_infoheader;
19 int width;
20 int height;
21 short int number_of_planes;
22 short int bits_per_pixel;
23
24 int compression_method;
25 int bytes_of_bitmap;
26 int hori_reso;
27 int vert_reso;
28 int no_of_colors;
29 int no_of_imp_colors;
30
31 int nI,nJ;
32 int pixSize;
33
34 unsigned char tempb,tempg,tempr,tempjunk[12];
35 int ta;
36 I2D* srcImage;
37
38 FILE *input;
39 input = fopen(pathName,"rb");
40 if(input == NULL)
41 {
42 perror("File pointer error");
43 return NULL;
44 }
45 else
46 {
47 //start of header information
48 fread(&signature,sizeof(signature),1,input);
49 fread(&file_size,sizeof(file_size),1,input);
50 fread(&reserved1,sizeof(reserved1),1,input);
51 fread(&reserved2,sizeof(reserved2),1,input);
52 fread(&loc_of_bitmap,sizeof(loc_of_bitmap),1,input);
53
54 fread(&size_of_infoheader,sizeof(size_of_infoheader),1,input);
55 fread(&width,sizeof(width),1,input); // Reads the width of the image
56 fread(&height,sizeof(height),1,input); // Reads the height of the image
57 fread(&number_of_planes,sizeof(number_of_planes),1,input);
58 fread(&bits_per_pixel,sizeof(bits_per_pixel),1,input);
59 fread(&compression_method,sizeof(compression_method),1,input);
60 fread(&bytes_of_bitmap,sizeof(bytes_of_bitmap),1,input);
61
62 fread(&hori_reso,sizeof(hori_reso),1,input);
63 fread(&vert_reso,sizeof(vert_reso),1,input);
64 fread(&no_of_colors,sizeof(no_of_colors),1,input);
65 fread(&no_of_imp_colors,sizeof(no_of_imp_colors),1,input);
66 //end of header information
67
68 srcImage = iMallocHandle(height, width);
69
70 // Conditions to check whether the BMP is interleaved and handling few exceptions
71 if(srcImage->height <= 0 || srcImage->width <= 0 || signature[0] != 'B' || signature[1] != 'M' || ( bits_per_pixel !=24 && bits_per_pixel !=8 ) )
72 {
73 printf("ERROR in BMP read: The input file is not in standard BMP format");
74 return NULL;
75 }
76 fseek(input,loc_of_bitmap,SEEK_SET);
77
78 if (bits_per_pixel == 8)
79 {
80 for(nI = (height - 1); nI >= 0 ; nI--)
81 {
82 for(nJ = 0;nJ < width; nJ++)
83 {
84 fread(&tempg,sizeof(unsigned char),1,input);
85 subsref(srcImage,nI,nJ) = (int)tempg;
86 }
87 }
88 }
89 else if (bits_per_pixel == 24)
90 {
91 for(nI = (height - 1); nI >= 0 ; nI--)
92 {
93 for(nJ = 0;nJ < width; nJ++)
94 {
95 fread(&tempb,sizeof(unsigned char),1,input);
96 fread(&tempg,sizeof(unsigned char),1,input);
97 fread(&tempr,sizeof(unsigned char),1,input);
98 ta = (3*tempr + 6*tempg + tempb)/10;
99 ta = tempg;
100 subsref(srcImage,nI,nJ) = (int)ta;
101 }
102 }
103 }
104 else
105 {
106 return NULL;
107 }
108
109 fclose(input);
110 return srcImage;
111 }
112}