0

既存の画像にいくつかの基本的な効果を適用できるアプリを開発しようとしています。私はそれでかなりうまくいっていました。しかし、ピクセルで遊ぶようになったとき、それは機能しなくなりました。誰かがそれを手伝ってくれますか?次のコードを記述するために、メイン スレッドの代わりに別のスレッドを使用する必要がありますか?

         int[] imagePixels = new int[picWidth * picHeight];
         bitmap.getPixels(imagePixels, 0, picWidth, 0, 0, picWidth, picHeight);


         for (int y = 0; y < picHeight; y++) {

             for (int x = 0; x < picWidth; x++) {

                 int index = y * picWidth + x;
                 int red = (imagePixels[index] >> 16) & 0xff;     
                 int green = (imagePixels[index] >> 8) & 0xff;
                 int blue = imagePixels[index] & 0xff;

                 red = (int) Math.abs(red-255);
                 green = (int) Math.abs(green-255);
                 blue = (int) Math.abs(blue-255);

                 imagePixles[index] = 0xff000000 | (red << 16) | (green << 8) | blue;

                 }
        }
        bitmap.setPixels(imagePixels, 0, picWidth, 0, 0, picWidth, picHeight);
4

1 に答える 1

1

GUIコード(AWT / Swingなど)を記述している場合、最初のルールは、ディスパッチスレッドでCPUを集中的に使用することは決してありません。

マウスのクリック、タッチ、メニューの選択など、ユーザーの入力に応答していて、プロセッサ時間のかかる作業を計画している場合は、別のスレッドをスピンオフして作業を行い、イベントを送信します。ジョブが完了したときのイベントキュー。

このように、UIはレスポンシブであり、エフェクトを適用した後に表示の一部を更新する場合は、ユーザーが生成したイベントとプログラムで生成されたイベントに応答します。

これは、UIコーディングに関する一般的なアドバイスです。誰かが、Android固有の機能に関してさらに追加できる可能性があります。私の推測では、Android OSは、イベント処理キューに挿入しているイベントへの応答を取得していないため、アプリが停止していると想定します。実際には、アプリが稼働しているときに、ディスパッチスレッドで何かを実行するのに忙しいだけです。ありません。

お役に立てば幸いです。

于 2013-03-12T11:13:52.777 に答える