FEDRA emulsion software from the OPERA Collaboration
EdbImage Class Reference

#include <EdbImage.h>

Inheritance diagram for EdbImage:
Collaboration diagram for EdbImage:

Public Member Functions

void AdoptImage (int columns, int rows, char *image, int col=256)
 
Int_t DumpPGM (const char *file)
 
 EdbImage ()
 
 EdbImage (const char *file, const char *format="PGM")
 
 EdbImage (int columns, int rows, const char *image, int col=256)
 
Int_t FillBufferDouble (TArrayD &image) const
 
char * GetBuffer () const
 
TH1F * GetHist1 () const
 
TH2F * GetHist2 (int flip=0) const
 
Int_t Height () const
 
Int_t LoadBMP (const char *file)
 
Int_t LoadPGM (const char *file)
 
Int_t LoadRAW (const char *file)
 
int Pixel (int c, int r) const
 
int Pixel (int ipix) const
 
virtual void Print (Option_t *opt="") const
 
virtual void Set0 ()
 
void SetColors (int col)
 
Int_t Width () const
 
virtual ~EdbImage ()
 

Private Attributes

TArrayC * eBuffer
 
Int_t eBytes
 
Int_t eColors
 
Int_t eColumns
 
Int_t eRows
 

Constructor & Destructor Documentation

◆ EdbImage() [1/3]

EdbImage::EdbImage ( )

◆ EdbImage() [2/3]

EdbImage::EdbImage ( const char *  file,
const char *  format = "PGM" 
)
31 {
32  Set0();
33  eBuffer = new TArrayC();
34 
35  Int_t counter = 0;
36 
37  if ( !strcmp(format,"PGM") ) counter = LoadPGM(file);
38  else if ( !strcmp(format,"RAW") ) counter = LoadRAW(file);
39  else if ( !strcmp(format,"BMP") ) counter = LoadBMP(file);
40 
41  printf("counter = %d\n",counter);
42  if(counter != eBytes)
43  printf("ERROR: EdbImage::EdbImage: counter != eBytes \n");
44 }
Int_t LoadBMP(const char *file)
Definition: EdbImage.cxx:307
TArrayC * eBuffer
Definition: EdbImage.h:32
virtual void Set0()
Definition: EdbImage.cxx:80
Int_t eBytes
Definition: EdbImage.h:33
Int_t LoadRAW(const char *file)
Definition: EdbImage.cxx:181
Int_t LoadPGM(const char *file)
Definition: EdbImage.cxx:216
TFile * file
Definition: write_pvr.C:3

◆ EdbImage() [3/3]

EdbImage::EdbImage ( int  columns,
int  rows,
const char *  image,
int  col = 256 
)
91 {
92  eColors = col;
93  eColumns = columns;
94  eRows = rows;
95  eBytes = rows*columns;
96 
97  int save = 32; // 32 bytes safety margin
98  int s = eBytes + save;
99  char *buffer = new char[s];
100 
101  eBuffer = new TArrayC();
102 
103  int size = (int)strlen(image); printf("strlen(image) = %d\n",size);
104 
105  memcpy((void *)buffer,(const void *)image,eBytes);
106  //strncpy(buffer,image,eBytes); // problems in case of '\0'
107 
108  eBuffer->Adopt(s,buffer);
109 }
Int_t eColors
Definition: EdbImage.h:30
Int_t eColumns
Definition: EdbImage.h:27
Int_t eRows
Definition: EdbImage.h:28
EdbSegP * s
Definition: tlg2pattern.C:32

◆ ~EdbImage()

EdbImage::~EdbImage ( )
virtual
48 {
49  if(eBuffer) delete eBuffer;
50  Set0();
51 }

Member Function Documentation

◆ AdoptImage()

void EdbImage::AdoptImage ( int  columns,
int  rows,
char *  image,
int  col = 256 
)
113 {
114  eColors = col;
115  eColumns = columns;
116  eRows = rows;
117  eBytes = rows*columns;
118  if(!eBuffer) eBuffer = new TArrayC();
119  eBuffer->Adopt(eBytes,image);
120 }

◆ DumpPGM()

Int_t EdbImage::DumpPGM ( const char *  file)
282 {
283  //VT: 3/05/2004
284 
285  FILE *out = fopen( file, "w" );
286  if(!out) return 0;
287  fprintf(out,"P2\n"); // grey-scale magic identifier
288  fprintf(out,"%d %d\n",Width(),Height()); // image size
289  fprintf(out,"255\n"); // max pixel value
290  int nbytes = Width()*Height();
291  int ibyte=0;
292  unsigned char *buf = (unsigned char*)(eBuffer->GetArray());
293  while(1) {
294  for(int istr=0; istr<16; istr++) {
295  fprintf(out,"%d ",(int)(buf[ibyte]));
296  ibyte++;
297  if(ibyte>=nbytes) break;
298  }
299  fprintf(out,"\n");
300  if(ibyte>nbytes-1) break;
301  }
302  fclose(out);
303  return ibyte;
304 }
Int_t Height() const
Definition: EdbImage.h:60
Int_t Width() const
Definition: EdbImage.h:59
fclose(pFile)

◆ FillBufferDouble()

Int_t EdbImage::FillBufferDouble ( TArrayD &  image) const
124 {
125  int npix = Width()*Height();
126  if(npix<=0) return 0;
127  image.Set(npix);
128  for(int i=0; i<npix; i++) image[i]=(Double_t)(Pixel(i));
129  return npix;
130 }
int Pixel(int c, int r) const
Definition: EdbImage.h:50

◆ GetBuffer()

char* EdbImage::GetBuffer ( ) const
inline
48 { return eBuffer->GetArray(); }

◆ GetHist1()

TH1F * EdbImage::GetHist1 ( ) const
140 {
141  TH1F *hist = new TH1F("pix","Pixels distribution",
142  eColors, 0, eColors);
143  int i=0;
144  unsigned char *buf = (unsigned char*)(eBuffer->GetArray());
145 
146  for (int icl=0; icl<eColumns; icl++) {
147  for (int ir=0; ir<eRows; ir++) {
148  i = ir*eColumns + icl;
149  hist->Fill( (int)(buf[i]) );
150  }
151  }
152 
153  return hist;
154 }
void hist()
Definition: init.C:23

◆ GetHist2()

TH2F * EdbImage::GetHist2 ( int  flip = 0) const
158 {
159  TH2F *hist = new TH2F("ccd","CCD image",
160  eColumns, 0, eColumns,
161  eRows, 0, eRows);
162  int i=0;
163  unsigned char *buf = (unsigned char*)(eBuffer->GetArray());
164 
165  int pix;
166 
167  for (int icl=0; icl<eColumns; icl++) {
168  for (int ir=0; ir<eRows; ir++) {
169  i = ir*eColumns + icl;
170  pix = (int)(buf[i]);
171  if(flip) pix = eColors-1-pix;
172  hist->Fill( icl, ir, pix );
173  }
174  }
175 
176  return hist;
177 }

◆ Height()

Int_t EdbImage::Height ( ) const
inline
60 {return eRows;}

◆ LoadBMP()

Int_t EdbImage::LoadBMP ( const char *  file)
308 {
309 /*
310  Loads a BMP format file...
311  Author: Igor Kreslo
312 */
313 typedef struct {
314  unsigned short int type; /* Magic identifier */
315  unsigned int size; /* File size in bytes */
316  unsigned short int reserved1, reserved2;
317  unsigned int offset; /* Offset to image data, bytes */
318 } HEADER;
319 
320 typedef struct {
321  unsigned int size; /* Header size in bytes */
322  int width,height; /* Width and height of image */
323  unsigned short int planes; /* Number of colour planes */
324  unsigned short int bits; /* Bits per pixel */
325  unsigned int compression; /* Compression type */
326  unsigned int imagesize; /* Image size in bytes */
327  int xresolution,yresolution; /* Pixels per meter */
328  unsigned int ncolours; /* Number of colours */
329  unsigned int importantcolours; /* Important colours */
330 } INFOHEADER;
331 
332 HEADER hdr;
333 INFOHEADER ihdr;
334 
335 //printf("hdr: %d ihdr: %d\n",sizeof(hdr), sizeof(ihdr));
336  char* ptr;
337 ifstream raw(file,ios::in | ios::binary); // ios::binary added! 24.11.2003 (Stas)
338  ptr=(char*)&hdr;
339  raw.read(ptr,14);
340  ptr=(char*)&ihdr;
341  raw.read(ptr,40);
342  if(ihdr.bits!=8) { printf("Error: %d bits/pixel bitmap is not supported!\n",ihdr.bits); return -1;}
343  int N=ihdr.width*ihdr.height;
344  char* byte= new char[N];
345  raw.read(byte,1024);
346  raw.read(byte,N);
347  raw.close();
348  eBytes=N;
349  eColumns=ihdr.width;
350  eRows=ihdr.height;
351  eColors=256;
352 
353  eBuffer->Adopt(eBytes,byte);
354 
355  printf("EdbImage::LoadBMP: file %s is readed...Image %d x %d pixels.\n", file,eColumns,eRows);
356 
357  return N;
358 }
float width
Definition: emthickness.cpp:71
Int_t type
Definition: testBGReduction_By_ANN.C:15

◆ LoadPGM()

Int_t EdbImage::LoadPGM ( const char *  file)
217 {
218 /*
219  Loads a PGM format file...
220  Author: Rosario Peluso
221 */
222  int colors, pix, i, j, p2, p5=0;
223  char Id[10], Buffer[BUFSIZ];
224  FILE *in = fopen( file, "rb" );
225  int NRows, NCols;
226  int save = 32; //safety margins in bytes
227 
228  fgets( Id, 10, in );
229  if( (p2 = strncmp(Id, "P2", 2)) && (p5 = strncmp(Id, "P5", 2)) )
230  {
231  printf("LoadPGM: Error Id\n"); return 0;
232  }
233 
234  while( (fgets(Buffer, BUFSIZ, in) != NULL) && (*Buffer == '#') )
235  ;
236 
237  if( sscanf(Buffer, "%d %d", &NRows, &NCols) != 2 )
238  { printf("LoadPGM: Error NRows, &NCols\n"); return 0; }
239 
240  eRows = NRows;
241  eColumns = NCols;
243 
244  if( fscanf(in, "%d\n", &colors) != 1 )
245  { printf("LoadPGM: Error\n"); return 0; }
246 
247  eColors = colors;
248 
249  if( colors != 255 )
250  printf("LoadPGM: Warning: colors = %d \n", colors);
251 
252  char *Pixel = new char[NRows * NCols + save];
253 
254  int counter = 0;
255  if( !p2 )
256  {
257  for( j = 0; j < NRows; j++ )
258  for( i = 0; i < NCols; i++ )
259  {
260  if( fscanf(in, "%d", &pix) != 1 ) printf("LoadPGM: Error\n");
261  Pixel[j * NCols + i] = pix;
262  counter++;
263  }
264  }
265  else if( !p5 && ((counter = fread((void *) Pixel, 1, NRows * NCols, in)) != eBytes) )
266  {
267  printf( "LoadPGM: Error loading binary file\n" );
268  return( 0 );
269  }
270 
271  fclose( in );
272 
273  eBuffer->Adopt(eBytes+save,Pixel);
274 
275  printf("EdbImage::LoadPGM: file %s is readed...\n", file);
276 
277  return counter;
278 }
#define NULL
Definition: nidaqmx.h:84

◆ LoadRAW()

Int_t EdbImage::LoadRAW ( const char *  file)
182 {
183 /*
184  Loads a .raw format file...
185  Author: Alfredo Cocco
186 
187 
188  eColumns = 512;
189  eRows = 512;
190 
191  fstream raw(file, ios::in);
192  char byte[262144];
193  raw.read(byte,262144);
194  raw.close();
195 
196  eBytes = 262144;
197  int save = 32; //safety margins in bytes
198 
199  // int index;
200  // int k = 0;
201 
202  // for(int i=0; i<size; i++) {
203  // for(int j=0; j<size; j++) {
204  // index = j + i * size;
205  // buffer[index] = (int) byte[k++];
206  // }
207  // }
208 
209  eBuffer->Adopt(eBytes+save,byte);
210  return eBytes;
211  */
212  return 0;
213 }

◆ Pixel() [1/2]

int EdbImage::Pixel ( int  c,
int  r 
) const
inline
51  { if(r<0) return 0; if(r>eRows) return 0;
52  if(c<0) return 0; if(c>eColumns) return 0;
53  return Pixel(eColumns*r + c); }
void r(int rid=2)
Definition: test.C:201

◆ Pixel() [2/2]

int EdbImage::Pixel ( int  ipix) const
inline
55  { return (int)(((unsigned char*)(eBuffer->GetArray()))[ipix]); }

◆ Print()

void EdbImage::Print ( Option_t *  opt = "") const
virtual
134 {
135  printf("Image: %d x %d \t : %d bytes\n", eColumns, eRows, eBytes);
136 }

◆ Set0()

void EdbImage::Set0 ( )
virtual
81 {
82  eRows = 0;
83  eColumns = 0;
84  eBuffer = 0;
85  eBytes = 0;
86  eColors = 0;
87 }

◆ SetColors()

void EdbImage::SetColors ( int  col)
inline
47 {eColors=col;}

◆ Width()

Int_t EdbImage::Width ( ) const
inline
59 {return eColumns;}

Member Data Documentation

◆ eBuffer

TArrayC* EdbImage::eBuffer
private

◆ eBytes

Int_t EdbImage::eBytes
private

◆ eColors

Int_t EdbImage::eColors
private

◆ eColumns

Int_t EdbImage::eColumns
private

◆ eRows

Int_t EdbImage::eRows
private

The documentation for this class was generated from the following files: