Calculating windowing width and level from Image pixel data can be done via accessing the raw pixel data and applying your own algorithm or via the DicomObjects method SetDefaultWindows of the DicomImage object. The problem with this, however, is that there will be no correct values as the best values depend on which area of the image contains the anatomical region the user is interested in looking at (which is why viewer applications always have the tools to change them).

The Width and Level properties of an image are unusual, in that they are both stored as a part of the image, and are also transient DicomImage properties, regularly adjusted by users. This page explains the relationship between the persistent and transient values.