1

一部のデバイスでは、ビットマップ形式の画像が、それらを格納する ImageView に対して大きすぎるようです。

画像はカメラとウェブで取得します。それらは、画像を移動したり、ズームしたりして欠陥を確認できるアクティビティで一度に 1 つずつ表示されます。

カメラからの画像を使用すると、「ビットマップが大きすぎてテクスチャにアップロードできません」というメッセージが表示されるようです。

スケールをハードコーディングしたくありませんでしたが、どんな画像でも取得し、Bitmap Factory を介して、Imageview に収まる画像を生成することを考えていました。次に、大きすぎない画像を取得し、マトリックスを ImageView に関連付けてピンチ ズームします。

4

1 に答える 1

1

私はこれをどのように解決できるかについてstackoverflowを見回していました。私は次の結論に達しました:

  1. これは、 「ビットマップが大きすぎてテクスチャにアップロードできない」という個々のデバイスGL_MAX_TEXTURE_SIZEに基づいており、jptsetungの回答と、ハードウェアアクセラレーションアクティビティを示す基本的なコメント-OpenGLテクスチャサイズ制限を取得する方法は?RomainGuyにしっかりとした理解を与えてもらいます。
  2. デバイスが処理できるソートデータを理解する必要があります。
  3. 次のコードを実行する場合、2を使用すると画像のサイズが4分の1になります。

    BitmapFactory.Options ops = new BitmapFactory.Options();
    opts.inSampleSize = 2;
    

    この理解は、幅と高さが半分になるため、サイズが4分の1になるという概念に基づいています。

  4. 私のようにハードコーディングしたくない場合。GL_MAX_TEXTURE_SIZEを使用して、それが何であるかを判断するのに役立てることができます。

最後に、私が行ったことは、ビットマップを使用してimageviewを取得し、それにMATRIXを割り当ててから、マトリックスを次のようにスケーリングしたことです。

Matrix m = new Matrix();
m.postScale(scaleX,scaleY);

これにより、画像のサンプルを取得して画像を小さくし、同じサイズを維持するように拡大することができます。inSampleSizeは、スケールアップするためのscaleXとscaleYの両方のサイズです。

考えられる問題:ピクセル化。画像のサイズにもよりますが、それほど悪くはありませんが、その一部が表示されます。

これは、デバイスの制約を解決するためです。画像の幅と高さがどれくらい大きいかを確認します。それが>GL_MAX_TEXTURE_SIZEの場合は、計算を行って、値の下に配置します。

そして私は次の標準的なものは次のようになると信じています:

  1. ..。

  2. 利益!

于 2012-10-10T19:19:03.387 に答える