diff --git a/modules/img/base/src/image_state/value_holder.cc b/modules/img/base/src/image_state/value_holder.cc
index 71c79d1d73cd384684669b9f349e1f3b41443d6e..aafae4b5412428571a0e0f24bcfde72443cd58fd 100644
--- a/modules/img/base/src/image_state/value_holder.cc
+++ b/modules/img/base/src/image_state/value_holder.cc
@@ -62,8 +62,13 @@ size_t calc_volume(const Size& s)
   {
     ++numbits;
   }
+  tmp=sizeof(V);
+  while (tmp >>= 1)
+  {
+    ++numbits;
+  }
   // check if number of pixels (2**(numbits+1)) larger than what size_t can handle
-  if(numbits>=sizeof(size_t)*sizeof(V)*8){
+  if(numbits>=sizeof(size_t)*8){
       throw std::bad_alloc();
   }
   return static_cast<size_t>(s[0])*static_cast<size_t>(s[1])*static_cast<size_t>(s[2]);