屏幕像素密度局部增大算法

一、簡介

命名: ImageViewMagnifierStrategy

使用場景:-針對ImageView加載大圖片壓縮時顯示更清晰

核心:提取-局部增大-應用

二、步驟

private intmWidth;

private intmHeight;

...

Bitmap bm1 = BitmapFactory.decodeFile(uri); ?//uri :Your image path

mWidth=bm.getWidth();

mHeight=bm.getHeight();

int[][]b=new int[mWidth][mHeight];

Bitmap bm2=Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),Bitmap.Config.ARGB_8888);


//1.提取&局部增大

for (int i = 100; i < mWidth - 100; i++) {

? ? ? for (int j = 100; j < mHeight - 100; j++) {

? ? ? ? ? ? ? if((bm1.getPixel(i,j)&0xFF)<255) {

? ? ? ? ? ? ? ? ? ? ? b[i][j]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i-1][j]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i+1][j]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i][j-1]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i][j+1]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i-1][j-1]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i+1][j+1]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i-1][j+1]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i+2][j-1]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i+2][j]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i+2][j+1]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i+2][j+2]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i-1][j+2]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i][j+2]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i+1][j+2]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i][j+2]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i+2][j]=0xff000000;


? ? ? ? ? ? ? ? ? ? ? //根據情況再加

? ? ? ? ? ? ? ? ? ? ? b[i][j+3]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i+3][j]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i][j+4]=0xff000000;

? ? ? ? ? ? ? ? ? ? ? b[i+4][j]=0xff000000;

? ? ? ? ? ?}

? ? ? ?}

//3.應用

for (int i = 100; i < mWidth; i++) {

? ? ? ? ? ? for (int j = 100; j < mHeight; j++) {

? ? ? ? ? ? ? ? ? bm2.setPixel(i,j,b[i][j]);

? ? ? ? ? ? ?}

?}

ivCover.setImageBitmap(bm2); ?//ivCover : Your ImageView

四、總結回顧

提取bitmap像素密度,進行局部放大,重新設置bitmap的像素密度

新建二維數組儲存像素點,從bm的寬高開始一個一個像素的查找,得到的每一個bm像素值&0xFF把負值變成正值(畫布是白色(0xFFFFFF),有顏色就是rgb即有值,& 0xFF后得到的值小于255代表找到了rgb不為FF的情況,因為rgb的范圍是0-255,遍歷找到bitmap中的所有符合的像素點,然后以該點為中心,擴散到周圍9個點的點陣,如果還需要繼續放大,往右往下再擴散一圈,直到你想要的清晰度,最后再遍歷,繪制已經局部放大的像素點,設置到bitmap,運用即可.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容