- // On remet les Octets dans le bon ordre si besoin est
- if (nb != 8) {
- int _sw = GetSwapCode();
-
- _Swap (destination, _sw, _lgrTotale, nb);
- }
-
- // On remet les Bits des Octets dans le bon ordre si besoin est
- //
- // ATTENTION : Jamais confronté a des pixels stockes sur 32 bits
- // avec moins de 32 bits utilises
- // et dont le bit de poids fort ne serait pas la ou on l'attend ...
- // --> ne marchera pas dans ce cas
- if (nbu!=nb){
- mask = mask >> (nb-nbu);
- int l=(int)MaxSize/(nb/8);
- unsigned short *deb = (unsigned short *)Pixels;
- for(int i=0;i<l;i++) {
- *deb = (*deb >> (nbu-highBit-1)) & mask;
- deb ++;
- }
- }
-
- // VOIR s'il ne faudrait pas l'affecter à un champ du dcmHeader
-
- return 1;
+ // On remet les Octets dans le bon ordre si besoin est
+ if (nb != 8)
+ SwapZone(destination, GetSwapCode(), lgrTotale, nb);
+
+ // On remet les Bits des Octets dans le bon ordre si besoin est
+ if (nbu != nb){
+ int l = (int)lgrTotale / (nb/8);
+ if (nb == 16) {
+ guint16 mask = 0xffff;
+ mask = mask >> (nb-nbu);
+ guint16 *deb = (guint16 *)destination;
+ for(int i = 0; i<l; i++) {
+ *deb = (*deb >> (nbu-highBit-1)) & mask;
+ deb ++;
+ }
+ } else if (nb == 32 ) {
+ guint32 mask = 0xffffffff;
+ mask = mask >> (nb-nbu);
+ guint32 *deb = (guint32 *)destination;
+ for(int i = 0; i<l; i++) {
+ *deb = (*deb >> (nbu-highBit-1)) & mask;
+ deb ++;
+ }
+ } else {
+ dbg.Verbose(0, "gdcmFile::GetImageDataIntoVector: wierd image");
+ return (size_t)0;
+ }
+ }
+ return lgrTotale;