18

私はここで答えを使用して、カメラのプレビューを縦向きに回転させることができました: http ://code.google.com/p/zxing/issues/detail?id=178#c46

ただし、プレビュー自体は引き伸ばされ/歪んでいます-高さはボックスを埋めるために引き伸ばされているように見えます(ただし、幅が画面に対して大きすぎて、収まるように押しつぶされている可能性があります)

サーフェスビューに合わせてコンテンツを拡大するのではなく、コンテンツを「ラップ」する方法はありますか?

編集:「CameraConfigurationManager」の「findBestPreviewSizeValue」メソッドを変更し、XポイントとYポイントを逆にすることでソートしました(以下のポインターのsean owenに感謝します!)。コードは次のとおりです。

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 < 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 < diff) {
    bestX = newY;
    bestY = newX;
    //original:
    //bestX = newX;
    //bestY = newY;
    diff = newDiff;
  }

}

if (bestX > 0 && bestY > 0) {
  return new Point(bestX, bestY);
}
return null;
}
4

5 に答える 5

6

これを機能させるには、プレビューをポートレート モードに設定するだけでなく、さらに多くのことを行う必要があります。たとえば、横向きではなく縦向きになっているため、適切なプレビュー サイズを選択する必要があります。

ラッピングは確かに望ましくないですか?いいえ、ラップすることはできません。必要に応じて、常にプレビュー画像全体を に投げ込みSurfaceView、引き伸ばします。そのコードの多くを再実装して別のことを行うことができると思いますが、それは非常に困難です。

于 2012-07-17T10:34:12.307 に答える
0

以下のコードを変更することで、これを機能させることができましたCameraConfigurationManager.java

float screenAspectRatio = (float) screenResolution.x / (float) screenResolution.y;

に:

float screenAspectRatio = (float) screenResolution.y / (float) screenResolution.x;

float aspectRatio = (float) maybeFlippedWidth / (float) maybeFlippedHeight;

に:

float aspectRatio = (float) maybeFlippedHeight / (float) maybeFlippedWidth;

この投稿と一緒にこれを行いました:AndroidのポートレートモードでのZxing Camera

これが他の人に役立つことを願っています。

于 2016-11-03T12:46:48.730 に答える