title: Android zxing - portrait camera preview/surfaceview is stretched/warped
body: <p>I have managed to use the answer here to rotate the camera preview to portrait:
  <a href="http://code.google.com/p/zxing/issues/detail?id=178#c46" rel="noreferrer">http://code.google.com/p/zxing/issues/detail?id=178#c46</a></p>
  
  <p>however the preview itself is stretched/warped - the height appears to be stretching to fill the box (but it could be that the width is too large for the screen and it is being squished to fit)</p>
  
  <p>Is there any way to 'wrap' the content rather than make it stretch to fit the surfaceview?</p>
  
  <p>EDIT: I sorted it by altering the 'findBestPreviewSizeValue' method in the 'CameraConfigurationManager' and reversing the X and Y points (thanks to sean owen for the pointer below!), here is the code:</p>
  
  <pre><code>private static Point findBestPreviewSizeValue(CharSequence previewSizeValueString,
    Point screenResolution) {
  int bestX = 0;
  int bestY = 0;
  int diff = Integer.MAX_VALUE;
  for (String previewSize : COMMA_PATTERN.split(previewSizeValueString)) {
  
    previewSize = previewSize.trim();
    int dimPosition = previewSize.indexOf('x');
    if (dimPosition &lt; 0) {
      Log.w(TAG, "Bad preview-size: " + previewSize);
      continue;
    }
  
    int newX;
    int newY;
    try {
      newY = Integer.parseInt(previewSize.substring(0, dimPosition));
      newX = Integer.parseInt(previewSize.substring(dimPosition + 1));
      //original:
      //newX = Integer.parseInt(previewSize.substring(0, dimPosition));
      //newY = Integer.parseInt(previewSize.substring(dimPosition + 1));
    } catch (NumberFormatException nfe) {
      Log.w(TAG, "Bad preview-size: " + previewSize);
      continue;
    }
  
    int newDiff = Math.abs(newX - screenResolution.x) + Math.abs(newY - screenResolution.y);
    if (newDiff == 0) {
      bestX = newY;
      bestY = newX;
      //original:
      //bestX = newX;
      //bestY = newY;
      break;
    } else if (newDiff &lt; diff) {
      bestX = newY;
      bestY = newX;
      //original:
      //bestX = newX;
      //bestY = newY;
      diff = newDiff;
    }
  
  }
  
  if (bestX &gt; 0 &amp;&amp; bestY &gt; 0) {
    return new Point(bestX, bestY);
  }
  return null;
  }
  </code></pre>