2011-06-19 3 views
0

こんにちは:私は2つのファイル(左右)に画像を持っています。これはimageswitcherで設定したいDrawableを返す関数です:アンドロイドで2つの画像を操作しているときにメモリ不足とOpenGLエラーが発生しました

public Drawable getImage(String left, String right){ 
    System.err.println("Decoding both images"); 
    Bitmap Left = BitmapFactory.decodeFile(left); 
    Bitmap Right = BitmapFactory.decodeFile(right); 
    int height = Math.max(Left.getHeight(),Right.getHeight()); 
    int width = Left.getWidth() + Right.getWidth(); 
    Bitmap result = Bitmap.createBitmap(width,height,Config.RGB_565);  
    System.err.println("Creating the canvas"); 
    Canvas bothImages = new Canvas(result); 
    System.err.println("Drawing both images beside each other"); 
    bothImages.drawBitmap(Left, 0f, 0f, null); 
    bothImages.drawBitmap(Right, Left.getWidth(), 0f, null); 
    System.err.println(Integer.toString(bothImages.getWidth()) + " x " + Integer.toString(bothImages.getHeight())); 
    bothImages.rotate(90f); 
    System.err.println(Integer.toString(bothImages.getWidth()) + " x " + Integer.toString(bothImages.getHeight())); 
    System.err.println("returning Drawable Left"); 
    return new BitmapDrawable(result); 
} 

私は2つの問題があります。私がConfig.ARGB_8888を使うとメモリ不足になるだから私はRGB_565に変更しました。しかし、これは画像の品質を低下させます。とにかくこれの周りにはありますか?

06-19 09:16:23.760: WARN/System.err(26218): Attempting to show /mnt/sdcard/Work/.temp/0000.jpg 
06-19 09:16:23.760: WARN/System.err(26218): Decoding both images 
06-19 09:16:24.510: WARN/System.err(26218): Creating the canvas 
06-19 09:16:24.510: WARN/System.err(26218): Drawing both images beside each other 
06-19 09:16:24.530: WARN/System.err(26218): 2560 x 1971 
06-19 09:16:24.530: WARN/System.err(26218): 2560 x 1971 
06-19 09:16:24.530: WARN/System.err(26218): returning Drawable Left 
06-19 09:16:24.570: WARN/OpenGLRenderer(26218): Bitmap too large to be uploaded into a texture 
06-19 09:16:24.850: WARN/OpenGLRenderer(26218): Bitmap too large to be uploaded into a texture 
06-19 09:16:24.870: WARN/System.err(26218): Inside On resume 
06-19 09:16:24.870: WARN/System.err(26218): About to set up animations 
06-19 09:16:24.870: WARN/System.err(26218): On resume Done 
06-19 09:16:24.870: WARN/System.err(26218): Attempting to show /mnt/sdcard/Work/.temp/0000.jpg 
06-19 09:16:24.870: WARN/System.err(26218): Decoding both images 
06-19 09:16:25.610: WARN/System.err(26218): Creating the canvas 
06-19 09:16:25.610: WARN/System.err(26218): Drawing both images beside each other 
06-19 09:16:25.640: WARN/System.err(26218): 2560 x 1971 
06-19 09:16:25.640: WARN/System.err(26218): 2560 x 1971 
06-19 09:16:25.640: WARN/System.err(26218): returning Drawable Left 
06-19 09:16:25.660: WARN/OpenGLRenderer(26218): Bitmap too large to be uploaded into a texture 
06-19 09:16:25.690: WARN/OpenGLRenderer(26218): Bitmap too large to be uploaded into a texture 

そして、私は明らかに生成された画像を見ることはありません。

第二にも、私は次のコンソールメッセージを取得コンフィグ設定を変更します。だから私は何が間違っているのか知りたいですか?

アクティビティの開始時に最初の2つのイメージが表示されるようにして、上のコードがアクティビティのOnResumeメソッドで呼び出されるようにします。なぜこのメソッドが2回実行されるのかを誰にでも教えてくれますか?多分私のメモリ不足のエラー これと関係があります...

ご協力ありがとうございます。

答えて

0

これはまさに答えではありませんが、誰かを助けるかもしれません。私は2つのサイド・バイ・サイド・イメージ・ビューを使用してこの問題を回避しました。あなたがしたいのは、私の場合の画像です。次に、境界線で画像をタッチするには、左側の画像にfitScaleType fitendを使用し、右側の画像にはfitstartを使用しました。私の場合)。ハードウェアACC限界によって打たたぶん、あなた

関連する問題