Sunday, 29 December 2013

Android make Image Sharper | Android image Blur Issue

Hello Droid Guys,
    Today , I am going to share a sample code which helps you in making image
more sharper and clear also helps you in fixing image Blur issue .This is based on
Convolution Matrix Theorem.

About Convolution Matrix : Check this link

Image Before:


Image After :


 1. ImageHelper.java : This is our helper class which helps in processing image
     sharper/


package com.exampl.imagerun;

import android.graphics.Bitmap;
import android.graphics.Color;
 
public class ImageHelper
{
    public static final int SIZE = 3;
 
    public double[][] Matrix;
    public double Factor = 1;
    public double Offset = 1;
 
   //Constructor with argument of size
    public ImageHelper(int size) {
        Matrix = new double[size][size];
    }
 
    public void setAll(double value) {
        for (int x = 0; x < SIZE; ++x) {
            for (int y = 0; y < SIZE; ++y) {
                Matrix[x][y] = value;
            }
        }
    }
 
    public void applyConfig(double[][] config) {
        for(int x = 0; x < SIZE; ++x) {
            for(int y = 0; y < SIZE; ++y) {
                Matrix[x][y] = config[x][y];
            }
        }
    }
 
    public static Bitmap computeConvolution3x3(Bitmap src, ImageHelper matrix) {
        int width = src.getWidth();
        int height = src.getHeight();
        Bitmap result = Bitmap.createBitmap(width, height, src.getConfig());
 
        int A, R, G, B;
        int sumR, sumG, sumB;
        int[][] pixels = new int[SIZE][SIZE];
 
        for(int y = 0; y < height - 2; ++y) {
            for(int x = 0; x < width - 2; ++x) {
 
                // get pixel matrix
                for(int i = 0; i < SIZE; ++i) {
                    for(int j = 0; j < SIZE; ++j) {
                        pixels[i][j] = src.getPixel(x + i, y + j);
                    }
                }
 
                // get alpha of center pixel
                A = Color.alpha(pixels[1][1]);
 
                // init color sum
                sumR = sumG = sumB = 0;
 
                // get sum of RGB on matrix
                for(int i = 0; i < SIZE; ++i) {
                    for(int j = 0; j < SIZE; ++j) {
                        sumR += (Color.red(pixels[i][j]) * matrix.Matrix[i][j]);
                        sumG += (Color.green(pixels[i][j]) * matrix.Matrix[i][j]);
                        sumB += (Color.blue(pixels[i][j]) * matrix.Matrix[i][j]);
                    }
                }
 
                // get final Red
                R = (int)(sumR / matrix.Factor + matrix.Offset);
                if(R < 0) { R = 0; }
                else if(R > 255) { R = 255; }
 
                // get final Green
                G = (int)(sumG / matrix.Factor + matrix.Offset);
                if(G < 0) { G = 0; }
                else if(G > 255) { G = 255; }
 
                // get final Blue
                B = (int)(sumB / matrix.Factor + matrix.Offset);
                if(B < 0) { B = 0; }
                else if(B > 255) { B = 255; }
 
                // apply new pixel
                result.setPixel(x + 1, y + 1, Color.argb(A, R, G, B));
            }
        }
 
        // final image
        return result;
    }
}

 Now, In our Activity class we need to add following code:

ImageView imageView=(ImageView)findViewById(R.id.image);


Now set image on image view

image.setImageBitmap(sharpenImage(BitmapFactory.

decodeResource(getResources(),images[i]),12));

And, here we are using Convolution Matrix Theorem to make image sharper.

 public Bitmap sharpenImage(Bitmap src, double weight) {
    // set sharpness configuration
    double[][] SharpConfig = new double[][] { { 0, -2, 0 },
    { -2, weight, -2 }, { 0, -2, 0 } };
    // create convolution matrix instance
    ImageHelper convMatrix = new ImageHelper(3);
    // apply configuration
    convMatrix.applyConfig(SharpConfig);
    // set weight according to factor
    convMatrix.Factor = weight - 8;
    return ImageHelper.computeConvolution3x3(src, convMatrix);
 }


Hope this will help some one.
Enjoy Coding :)

Friday, 13 December 2013

Android File or Folder listing from Sd Card | Android File explorer |Android folder listing | List file from sd card android

Hello Friends,
            This sample helps you in browsing your Sd Card folder and files. List all your music folder, file and images programmatically .



Here are the code:

1.ListFolder.Java
package com.android.sdcard.folder;

import java.io.File;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.text.DateFormat;

import com.example.fileexplorer.R;

import android.os.Bundle;
import android.app.ListActivity;
import android.content.Intent;
import android.view.View;
import android.widget.ListView;

public class ListFolder extends ListActivity {

 private File currentDir;
 private FileArrayAdapter adapter;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  currentDir = new File("/sdcard/");
  fill(currentDir);
 }

 private void fill(File f) {
  File[] dirs = f.listFiles();
  this.setTitle("Current Dir: " + f.getName());
  List dir = new ArrayList();
  List fls = new ArrayList();
  try {
   for (File ff : dirs) {
    String name = ff.getName();
    Date lastModDate = new Date(ff.lastModified());
    DateFormat formater = DateFormat.getDateTimeInstance();
    String date_modify = formater.format(lastModDate);
    /*
     * Note: Remove this
     * name.equalsIgnoreCase("Covenant and Augment Softsol" if u
     * want to list all ur sd card file and folder
     */
    if (ff.isDirectory()
              && name.equalsIgnoreCase("Covenant and Augment Softsol")) {

     File[] fbuf = ff.listFiles();
     int buf = 0;
     if (fbuf != null) {
      buf = fbuf.length;
     } else
      buf = 0;
     String num_item = String.valueOf(buf);
     if (buf == 0)
      num_item = num_item + " item";
     else
      num_item = num_item + " items";

     // String formated = lastModDate.toString();
     dir.add(new Albumb(ff.getName(), num_item, date_modify, ff
       .getAbsolutePath(), "directory_icon"));
    } else {
     /*
      * Note: Remove this
      * f.getName().equalsIgnoreCase("Covenant and Augment Softsol"
      * if u want to list all ur sd card file and folder
      */
     if (f.getName().equalsIgnoreCase(
       "Covenant and Augment Softsol")) {
      fls.add(new Albumb(ff.getName(), ff.length() + " Byte",
        date_modify, ff.getAbsolutePath(), "file_icon"));
     }
    }
   }
  } catch (Exception e) {

  }
  Collections.sort(dir);
  Collections.sort(fls);
  dir.addAll(fls);
  if (!f.getName().equalsIgnoreCase("sdcard"))
   dir.add(0, new Albumb("..", "Parent Directory", "", f.getParent(),
     "directory_up"));
  adapter = new FileArrayAdapter(ListFolder.this, R.layout.file_view, dir);
  this.setListAdapter(adapter);
 }

 @Override
 protected void onListItemClick(ListView l, View v, int position, long id) {
  // TODO Auto-generated method stub
  super.onListItemClick(l, v, position, id);
  Albumb o = adapter.getItem(position);
  if (o.getImage().equalsIgnoreCase("directory_icon")
    || o.getImage().equalsIgnoreCase("directory_up")) {
   currentDir = new File(o.getPath());
   fill(currentDir);
  }
 }

}



2. Albumb.java

package com.android.sdcard.folder;

 public class Albumb implements Comparable{
 private String name;
 private String data;
 private String date;
 private String path;
 private String image;
 
 public Albumb(String name,String date, String dt, String path, String image)
 {
  this.name = name;
  this.data = date;
  this.path = path; 
  this.image = image;
  
 }
 public String getName()
 {
  return name;
 }
 public String getData()
 {
  return data;
 }
 public String getDate()
 {
  return date;
 }
 public String getPath()
 {
  return path;
 }
 public String getImage() {
  return image;
 }
 
 public int compareTo(Albumb o) {
  if(this.name != null)
   return this.name.toLowerCase().compareTo(o.getName().toLowerCase()); 
  else 
   throw new IllegalArgumentException();
 }
}



3. FileArrayAdapter.java

package com.android.sdcard.folder;

import java.util.List;

import com.example.fileexplorer.R;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;

public class FileArrayAdapter extends ArrayAdapter {

 private Context c;
 private int id;
 private List items;

 public FileArrayAdapter(Context context, int textViewResourceId,
   List objects) {
  super(context, textViewResourceId, objects);
  c = context;
  id = textViewResourceId;
  items = objects;
 }

 public Albumb getItem(int i) {
  return items.get(i);
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  View v = convertView;
  if (v == null) {
   LayoutInflater vi = (LayoutInflater) c
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   v = vi.inflate(id, null);
  }

  /* create a new view of my layout and inflate it in the row */
  // convertView = ( RelativeLayout ) inflater.inflate( resource, null );

  final Albumb item = items.get(position);
  if (item != null) {
   TextView t1 = (TextView) v.findViewById(R.id.TextView01);
   TextView t2 = (TextView) v.findViewById(R.id.TextView02);
   TextView t3 = (TextView) v.findViewById(R.id.TextViewDate);
   /* Take the ImageView from layout and set the city's image */
   ImageView imageCity = (ImageView) v.findViewById(R.id.fd_Icon1);

   String type = item.getImage();
   if (type.equalsIgnoreCase("directory_icon")) {
    String uri = "drawable/" + item.getImage();
    int imageResource = c.getResources().getIdentifier(uri, null,
      c.getPackageName());
    Drawable image = c.getResources().getDrawable(imageResource);
    imageCity.setImageDrawable(image);
   } else {
    Bitmap bmp = BitmapFactory.decodeFile(item.getPath());
    imageCity.setImageBitmap(bmp);
   }
   if (t1 != null)
    t1.setText(item.getName());
   if (t2 != null)
    t2.setText(item.getData());
   if (t3 != null)
    t3.setText(item.getDate());

  }
  return v;
 }

}


4. AndroidManifest,xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.fileexplorer"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.android.sdcard.folder.ListFolder"
            android:label="@string/title_activity_fileexplorer"
            android:theme="@android:style/Theme.Holo" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>



Download complete code here



Hope this will helps some one.
Enjoy Coidng :)

Wednesday, 4 December 2013

Android Play video from SD Card | Populating a listview with videos from sdcard in android

Hello Friends,
            This is an android simple example which list all videos file store in 
device sd card and Play it in Video view .
Android provides a view control android.widget.VideoView that encapsulates
creating and initializing the MediaPlayer.










1. VideoStoredInSDCard.java

package com.example.videoplayer;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class VideoStoredInSDCard extends Activity {
 private Cursor videocursor;
 private int video_column_index;
 ListView videolist;
 int count;
 String[] thumbColumns = { MediaStore.Video.Thumbnails.DATA,
   MediaStore.Video.Thumbnails.VIDEO_ID };

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  init_phone_video_grid();
 }

 @SuppressWarnings("deprecation")
 private void init_phone_video_grid() {
  System.gc();
  String[] proj = { MediaStore.Video.Media._ID,
    MediaStore.Video.Media.DATA,
    MediaStore.Video.Media.DISPLAY_NAME,
    MediaStore.Video.Media.SIZE };
  videocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
    proj, null, null, null);
  count = videocursor.getCount();
  videolist = (ListView) findViewById(R.id.PhoneVideoList);
  videolist.setAdapter(new VideoAdapter(getApplicationContext()));
  videolist.setOnItemClickListener(videogridlistener);
 }

 private OnItemClickListener videogridlistener = new OnItemClickListener() {
  public void onItemClick(AdapterView parent, View v, int position,
    long id) {
   System.gc();
   video_column_index = videocursor
     .getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
   videocursor.moveToPosition(position);
   String filename = videocursor.getString(video_column_index);
   Intent intent = new Intent(VideoStoredInSDCard.this,
     ViewVideo.class);
   intent.putExtra("videofilename", filename);
   startActivity(intent);
  }
 };

 public class VideoAdapter extends BaseAdapter {
  private Context vContext;

  public VideoAdapter(Context c) {
   vContext = c;
  }

  public int getCount() {
   return count;
  }

  public Object getItem(int position) {
   return position;
  }

  public long getItemId(int position) {
   return position;
  }

  public View getView(int position, View convertView, ViewGroup parent) {
   System.gc();
   ViewHolder holder;
   String id = null;
   convertView = null;
   if (convertView == null) {
    convertView = LayoutInflater.from(vContext).inflate(
      R.layout.listitem, parent, false);
    holder = new ViewHolder();
    holder.txtTitle = (TextView) convertView
      .findViewById(R.id.txtTitle);
    holder.txtSize = (TextView) convertView
      .findViewById(R.id.txtSize);
    holder.thumbImage = (ImageView) convertView
      .findViewById(R.id.imgIcon);

    video_column_index = videocursor
      .getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
    videocursor.moveToPosition(position);
    id = videocursor.getString(video_column_index);
    video_column_index = videocursor
      .getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);
    videocursor.moveToPosition(position);
    // id += " Size(KB):" +
    // videocursor.getString(video_column_index);
    holder.txtTitle.setText(id);
    holder.txtSize.setText(" Size(KB):"
      + videocursor.getString(video_column_index));

    String[] proj = { MediaStore.Video.Media._ID,
      MediaStore.Video.Media.DISPLAY_NAME,
      MediaStore.Video.Media.DATA };
    @SuppressWarnings("deprecation")
    Cursor cursor = managedQuery(
      MediaStore.Video.Media.EXTERNAL_CONTENT_URI, proj,
      MediaStore.Video.Media.DISPLAY_NAME + "=?",
      new String[] { id }, null);
    cursor.moveToFirst();
    long ids = cursor.getLong(cursor
      .getColumnIndex(MediaStore.Video.Media._ID));

    ContentResolver crThumb = getContentResolver();
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 1;
    Bitmap curThumb = MediaStore.Video.Thumbnails.getThumbnail(
      crThumb, ids, MediaStore.Video.Thumbnails.MICRO_KIND,
      options);
    holder.thumbImage.setImageBitmap(curThumb);
    curThumb = null;

   } /*
    * else holder = (ViewHolder) convertView.getTag();
    */
   return convertView;
  }
 }

 static class ViewHolder {

  TextView txtTitle;
  TextView txtSize;
  ImageView thumbImage;
 }
}


2. ViewVideo.java

package com.example.videoplayer;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class ViewVideo extends Activity {
      private String filename;
      VideoView vv;
      @Override
      public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            System.gc();
            Intent i = getIntent();
            Bundle extras = i.getExtras();
            filename = extras.getString("videofilename");
            // vv = new VideoView(getApplicationContext());
            setContentView(R.layout.activity_view);
            vv = (VideoView) findViewById(R.id.videoView);
            vv.setVideoPath(filename);
            vv.setMediaController(new MediaController(this));
            vv.requestFocus();
            vv.start();
      }
}


3. AndroidManifest.xml


<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.videoplayer"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.videoplayer.VideoStoredInSDCard"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

              <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
        <activity android:name=".ViewVideo" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
</manifest>






Enjoy Coding :)

Download Source code Code

 

Copyright @ 2013 Android Developer Blog.