int MRC::read2DIm_32bit(float *buf, int n) { int mode = m_header.mode; size_t size=m_header.nx*m_header.ny; if(size<=0) return 0; char *buf8=NULL; unsigned char *bufu8=NULL; short *buf16=NULL; unsigned short *bufu16=NULL; size_t r,i; switch(mode) { case 0: buf8=new char[size]; r=read2DIm((void*)buf8,n); if(r<=0) { delete [] buf8; return 0; } for(i=0;i<size;i++) buf[i]=float(buf8[i]); delete [] buf8; return r; case 1: buf16=new short[size]; r=read2DIm((void*)buf16,n); if(r<=0) { delete [] buf16; return 0; } for(i=0;i<size;i++) buf[i]=float(buf16[i]); delete [] buf16; return r; case 2: return read2DIm((void*)buf,n); case 5: bufu8=new unsigned char[size]; r=read2DIm((void*)bufu8,n); if(r<=0) { delete [] bufu8; return 0; } for(i=0;i<size;i++) buf[i]=float(bufu8[i]); delete [] bufu8; return r; case 6: bufu16=new unsigned short[size]; r=read2DIm((void*)bufu16,n); if(r<=0) { delete [] bufu16; return 0; } for(i=0;i<size;i++) buf[i]=float(bufu16[i]); delete [] bufu16; return r; } return 0; }
int MRC::read2DIm_32bit(float *buf, int n) { #ifdef EMAN2 if(int(imageHeader.get_attr("nImage"))==1 && m_header.nz>1) { // read a section in 3D map Region r(0, 0, n, imageHeader.get_xsize(), imageHeader.get_ysize(), 1); imageHeader.read_image(m_filename, 0, 0, &r); } else { imageHeader.read_image(m_filename, n); } size_t nbytes = sizeof(float)*imageHeader.get_size(); memcpy(buf, imageHeader.get_const_data(), nbytes); return nbytes; #else int mode = m_header.mode; size_t size=m_header.nx*m_header.ny; if(size<=0) return 0; char *buf8=NULL; unsigned char *bufu8=NULL; short *buf16=NULL; unsigned short *bufu16=NULL; size_t r,i; switch(mode) { case 0: buf8=new char[size]; r=read2DIm((void*)buf8,n); if(r<=0) { delete [] buf8; return 0; } for(i=0;i<size;i++) buf[i]=float(buf8[i]); delete [] buf8; return r; case 1: buf16=new short[size]; r=read2DIm((void*)buf16,n); if(r<=0) { delete [] buf16; return 0; } for(i=0;i<size;i++) buf[i]=float(buf16[i]); delete [] buf16; return r; case 2: return read2DIm((void*)buf,n); case 5: bufu8=new unsigned char[size]; r=read2DIm((void*)bufu8,n); if(r<=0) { delete [] bufu8; return 0; } for(i=0;i<size;i++) buf[i]=float(bufu8[i]); delete [] bufu8; return r; case 6: bufu16=new unsigned short[size]; r=read2DIm((void*)bufu16,n); if(r<=0) { delete [] bufu16; return 0; } for(i=0;i<size;i++) buf[i]=float(bufu16[i]); delete [] bufu16; return r; } return 0; #endif }