簡體   English   中英

在android中重繪位圖的更快方法?

[英]Faster way to redraw a bitmap in android?

我正在為OCR處理圖像,我需要更改位圖中一堆像素的顏色。 有沒有比setPixel和getPixel更快的方法? 目前我只是使用一種方法來執行for循環,該方法檢查輸入與一堆RGB值,如果匹配則返回true。 非常感謝你!

    Bitmap img = myImage.copy(Bitmap.Config.ARGB_8888, true);;

    for (int w = 0; w < img.getWidth(); w++) {
        for (int h = 0; h < img.getHeight(); h++) {
            int value = img.getPixel(w, h);
            if (filter(value)) {
                img.setPixel(w, h, Color.rgb(0, 0, 0));
            } else img.setPixel(w, h, Color.rgb(255, 255, 255));
        }
    }

只是想跟進並發布代碼,如果有人通過搜索找到這個。

我在問題中的代碼平均需要3.4s,下面的代碼使用Gabe的建議時間不到200ms。 我還添加了一個長度變量,因為我讀取不調用array.length()每次迭代都可以提高性能,但在測試中似乎沒有太大的好處

    int width = img.getWidth();
    int height = img.getHeight();
    int length = width * height;
    int[] pixels = new int[width*height];
    img.getPixels(pixels, 0, width, 0, 0, width, height);

    for (int i = 0; i < length; i++) {
        if (filter(pixels[i])) {
            pixels[i] = Color.rgb(0, 0, 0);
        } else pixels[i] = Color.rgb(255, 255, 255);
    }

    img.setPixels(pixels, 0, width, 0, 0, width, height);

您可以隨時嘗試將圖像分解為象限/網格,並為每個象限分配一個單獨的線程。

我通常在Jni上使用OpenCV處理圖像。 它比在Java上處理快得多。 如果您不熟悉JNI,請參考此鏈接。 什么是JNI Graphics或如何使用它? 您還可以分割圖像,然后使用多線程處理!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM