Non Mutable Bitmap

Put your problem here if it does not fit any of the other categories.

Non Mutable Bitmap

Postby cptpingu » Fri May 09, 2008 6:45 pm

Hi.

I'm a new Android developper, and I have difficulties to handle bitmap. I want to apply a filter on an image. I try a lot of things, but it still doesn't work.

Let me explain you. I have a screen with an image, when I clicked on the filter button, a gallery of icon representing a filter appears. When I clicked on a filter, it should apply this filter on the image.
My first question is: How can I get the bitmap of the image which located in the previous screen ?
My second one is: How can I edit a bitmap, because it seems non mutable ? (bitmap.isMutable() == false)


Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2.  
  3.  
  4. public class Image extends Activity
  5.  
  6. {
  7.  
  8.  
  9.  
  10.         private String  mImagePath;
  11.  
  12.  
  13.  
  14.         @Override
  15.  
  16.         protected void onCreate(Bundle icicle)
  17.  
  18.         {
  19.  
  20.                 super.onCreate(icicle);
  21.  
  22.                 setContentView(R.layout.image);
  23.  
  24.                 final ImageView img = (ImageView) findViewById(R.id.image_view);
  25.  
  26.                 Intent i = getIntent();
  27.  
  28.                 mImagePath = i.getStringExtra("picture");
  29.  
  30.                 final Drawable imgDraw = Drawable.createFromPath(mImagePath);
  31.  
  32.                 img.setBackground(imgDraw);
  33.  
  34.                 img.setScaleType(ImageView.ScaleType.FIT_CENTER);
  35.  
  36.                 img.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
  37.  
  38.                                 LayoutParams.FILL_PARENT));
  39.  
  40.                 if (Filter.filterBitmap != null)
  41.  
  42.                 {
  43.  
  44.                         img.setImageBitmap(Filter.filterBitmap);
  45.  
  46.                         Filter.filterBitmap = null;
  47.  
  48.                 }
  49.  
  50.         }
  51.  
  52.  
  53.  
  54.         private static final int        PAINT_MENU_ID           = Menu.FIRST;
  55.  
  56.         private static final int        FILTER_MENU_ID  = Menu.FIRST + 1;
  57.  
  58.  
  59.  
  60.         @Override
  61.  
  62.         public boolean onCreateOptionsMenu(Menu menu)
  63.  
  64.         {
  65.  
  66.                 super.onCreateOptionsMenu(menu);
  67.  
  68.  
  69.  
  70.                 menu.add(0, PAINT_MENU_ID, "Paint").setShortcut('2', 'c');
  71.  
  72.                 menu.add(0, FILTER_MENU_ID, "Filter").setShortcut('3', 'f');
  73.  
  74.                 return true;
  75.  
  76.         }
  77.  
  78.  
  79.  
  80.         @Override
  81.  
  82.         public boolean onPrepareOptionsMenu(Menu menu)
  83.  
  84.         {
  85.  
  86.                 super.onPrepareOptionsMenu(menu);
  87.  
  88.                 return true;
  89.  
  90.         }
  91.  
  92.  
  93.  
  94.         @Override
  95.  
  96.         public boolean onOptionsItemSelected(Menu.Item item)
  97.  
  98.         {
  99.  
  100.                 switch (item.getId())
  101.  
  102.                 {
  103.  
  104.                 case PAINT_MENU_ID:
  105.  
  106.                         Intent intent = new Intent(Image.this, Draw.class);
  107.  
  108.                         intent.putExtra("picture", mImagePath);
  109.  
  110.                         Image.this.startActivity(intent);
  111.  
  112.                         return true;
  113.  
  114.                 case FILTER_MENU_ID:
  115.  
  116.                         Intent inten = new Intent(Image.this, Filter.class);
  117.  
  118.                         inten.putExtra("picture", mImagePath);
  119.  
  120.                         Image.this.startActivity(inten);
  121.  
  122.                         return true;
  123.  
  124.                 }
  125.  
  126.                 return super.onOptionsItemSelected(item);
  127.  
  128.         }
  129.  
  130. }
  131.  
  132.  
  133.  
  134.  
Parsed in 0.037 seconds, using GeSHi 1.0.8.4


Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2.  
  3.  
  4. public class Filter extends Activity implements OnItemClickListener
  5.  
  6. {
  7.  
  8.         static Bitmap   filterBitmap    = null;
  9.  
  10.  
  11.  
  12.         @Override
  13.  
  14.         public void onCreate(Bundle icicle)
  15.  
  16.         {
  17.  
  18.                 super.onCreate(icicle);
  19.  
  20.  
  21.  
  22.                 setContentView(R.layout.filter);
  23.  
  24.                 GridView g = (GridView) findViewById(R.id.filter);
  25.  
  26.                 g.setAdapter(new ImageAdapter(this));
  27.  
  28.                 g.setOnItemClickListener(this);
  29.  
  30.         }
  31.  
  32.  
  33.  
  34.         public View makeView()
  35.  
  36.         {
  37.  
  38.                 ImageView i = new ImageView(this);
  39.  
  40.                 i.setBackgroundColor(0xFF000000);
  41.  
  42.                 i.setScaleType(ImageView.ScaleType.FIT_CENTER);
  43.  
  44.                 i.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
  45.  
  46.                                 LayoutParams.FILL_PARENT));
  47.  
  48.                 return i;
  49.  
  50.         }
  51.  
  52.  
  53.  
  54.         public class ImageAdapter extends BaseAdapter
  55.  
  56.         {
  57.  
  58.  
  59.  
  60.                 private Integer[]       mThumbIds       = { R.drawable.sample_thumb_0,
  61.  
  62.                                                                                                                                                 R.drawable.sample_thumb_1,
  63.  
  64.                                                                                                                                                 R.drawable.sample_thumb_2,
  65.  
  66.                                                                                                                                                 R.drawable.sample_thumb_3,
  67.  
  68.                                                                                                                                                 R.drawable.sample_thumb_4,
  69.  
  70.                                                                                                                                                 R.drawable.sample_thumb_5,
  71.  
  72.                                                                                                                                                 R.drawable.sample_thumb_6,
  73.  
  74.                                                                                                                                                 R.drawable.sample_thumb_7,
  75.  
  76.                                                                                                                                                 R.drawable.sample_thumb_0,
  77.  
  78.                                                                                                                                                 R.drawable.sample_thumb_1,
  79.  
  80.                                                                                                                                                 R.drawable.sample_thumb_2,
  81.  
  82.                                                                                                                                                 R.drawable.sample_thumb_3,
  83.  
  84.                                                                                                                                                 R.drawable.sample_thumb_4,
  85.  
  86.                                                                                                                                                 R.drawable.sample_thumb_5,
  87.  
  88.                                                                                                                                                 R.drawable.sample_thumb_6,
  89.  
  90.                                                                                                                                                 R.drawable.sample_thumb_7,
  91.  
  92.                                                                                                                                                 R.drawable.sample_thumb_0,
  93.  
  94.                                                                                                                                                 R.drawable.sample_thumb_1,
  95.  
  96.                                                                                                                                                 R.drawable.sample_thumb_2,
  97.  
  98.                                                                                                                                                 R.drawable.sample_thumb_3,
  99.  
  100.                                                                                                                                                 R.drawable.sample_thumb_4,
  101.  
  102.                                                                                                                                                 R.drawable.sample_thumb_5,
  103.  
  104.                                                                                                                                                 R.drawable.sample_thumb_6,
  105.  
  106.                                                                                                                                                 R.drawable.sample_thumb_7,
  107.  
  108.                                                                                                                                                 R.drawable.sample_thumb_0,
  109.  
  110.                                                                                                                                                 R.drawable.sample_thumb_1,
  111.  
  112.                                                                                                                                                 R.drawable.sample_thumb_2,
  113.  
  114.                                                                                                                                                 R.drawable.sample_thumb_3,
  115.  
  116.                                                                                                                                                 R.drawable.sample_thumb_4,
  117.  
  118.                                                                                                                                                 R.drawable.sample_thumb_5,
  119.  
  120.                                                                                                                                                 R.drawable.sample_thumb_6,
  121.  
  122.                                                                                                                                                 R.drawable.sample_thumb_7,
  123.  
  124.                                                                                                                                                 R.drawable.sample_thumb_0,
  125.  
  126.                                                                                                                                                 R.drawable.sample_thumb_1,
  127.  
  128.                                                                                                                                                 R.drawable.sample_thumb_2,
  129.  
  130.                                                                                                                                                 R.drawable.sample_thumb_3,
  131.  
  132.                                                                                                                                                 R.drawable.sample_thumb_4,
  133.  
  134.                                                                                                                                                 R.drawable.sample_thumb_5,
  135.  
  136.                                                                                                                                                 R.drawable.sample_thumb_6,
  137.  
  138.                                                                                                                                                 R.drawable.sample_thumb_7 };
  139.  
  140.  
  141.  
  142.                 public ImageAdapter(Context c)
  143.  
  144.                 {
  145.  
  146.                         mContext = c;
  147.  
  148.                 }
  149.  
  150.  
  151.  
  152.                 public int getCount()
  153.  
  154.                 {
  155.  
  156.                         return mThumbIds.length;
  157.  
  158.                 }
  159.  
  160.  
  161.  
  162.                 public Object getItem(int position)
  163.  
  164.                 {
  165.  
  166.                         return position;
  167.  
  168.                 }
  169.  
  170.  
  171.  
  172.                 public long getItemId(int position)
  173.  
  174.                 {
  175.  
  176.                         return position;
  177.  
  178.                 }
  179.  
  180.  
  181.  
  182.                 public View getView(int position, View convertView, ViewGroup parent)
  183.  
  184.                 {
  185.  
  186.                         ImageView i = new ImageView(mContext);
  187.  
  188.  
  189.  
  190.                         i.setImageResource(mThumbIds[position]);
  191.  
  192.                         i.setLayoutParams(new Gallery.LayoutParams(60, 60));
  193.  
  194.                         i.setAdjustViewBounds(false);
  195.  
  196.                         i.setScaleType(ImageView.ScaleType.CENTER_CROP);
  197.  
  198.                         i.setPadding(8, 8, 8, <img src="http://www.anddev.org/images/smilies/cool.png" alt="8)" title="Cool" />;
  199.  
  200.  
  201.  
  202.                         return i;
  203.  
  204.                 }
  205.  
  206.  
  207.  
  208.                 private Context mContext;
  209.  
  210.  
  211.  
  212.         }
  213.  
  214.  
  215.  
  216.         @Override
  217.  
  218.         public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3)
  219.  
  220.         {
  221.  
  222.                 final ProgressDialog p = new ProgressDialog(Filter.this);
  223.  
  224.                 p.setTitle("Apply");
  225.  
  226.                 p.setMessage("Please wait while applying the filter...");
  227.  
  228.                 p.setIndeterminate(true);
  229.  
  230.                 /*
  231.  
  232.                  * ProgressDialog.show(Filter.this, "Apply" , "Please wait while applying
  233.  
  234.                  * the filter...", true);
  235.  
  236.                  */
  237.  
  238.  
  239.  
  240.                 p.show();
  241.  
  242.                 new Thread()
  243.  
  244.                 {
  245.  
  246.                         public void run()
  247.  
  248.                         {
  249.  
  250.                                 try
  251.  
  252.                                 {
  253.  
  254.  
  255.  
  256.                                         // Intent i = new Intent(Filter.this, Rotate.class);
  257.  
  258.                                         // startActivity(i);
  259.  
  260.                                         String path = getIntent().getStringExtra("picture");
  261.  
  262.                                         Bitmap bmp = BitmapFactory.decodeFile(path);                                   
  263.  
  264.                                        
  265.  
  266.                                         // Bitmap bmp2 = bmp.copy(new android.graphics.Bitmap.Config(), true);
  267.  
  268.                                         for (int i = 0; i < 200; i++)
  269.  
  270.                                                 for (int j = 0; j < 200; j++)
  271.  
  272.                                                         bmp.setPixel(i, j, 0); // Raise an exception
  273.  
  274.                                         filterBitmap = bmp;
  275.  
  276.  
  277.  
  278.                                         // // create a matrix for the manipulation
  279.  
  280.                                         // Matrix matrix = new Matrix();
  281.  
  282.                                         // // resize the bit map
  283.  
  284.                                         // matrix.postScale(bmp.getWidth(), bmp.getHeight());
  285.  
  286.                                         // // rotate the Bitmap
  287.  
  288.                                         // matrix.postRotate(45);
  289.  
  290.                                         //                     
  291.  
  292.                                         // // recreate the new Bitmap
  293.  
  294.                                         // Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 0, 0,
  295.  
  296.                                         // bmp.getWidth(), bmp.getHeight(),
  297.  
  298.                                         // matrix, true);
  299.  
  300.                                         // bmp = resizedBitmap;
  301.  
  302.  
  303.  
  304.                                         // sleep(5000);
  305.  
  306.  
  307.  
  308.                                 }
  309.  
  310.                                 catch (Exception e)
  311.  
  312.                                 {
  313.  
  314.                                 }
  315.  
  316.                                 // Dismiss the Dialog
  317.  
  318.                                 p.dismiss();
  319.  
  320.                                 Filter.this.finish();
  321.  
  322.                         }
  323.  
  324.                 }.start();
  325.  
  326.         }
  327.  
  328.  
  329.  
  330. }
  331.  
  332.  
  333.  
  334.  
Parsed in 0.048 seconds, using GeSHi 1.0.8.4


Thanks a lot.
cptpingu
Freshman
Freshman
 
Posts: 3
Joined: Fri May 09, 2008 6:30 pm

Top

Postby cptpingu » Fri May 09, 2008 9:21 pm

I find a way to make it work:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. Bitmap b = bmp.copy(android.graphics.Bitmap.Config.RGB_565, true);
  3.  
  4.  
Parsed in 0.032 seconds, using GeSHi 1.0.8.4


It could help someone !

But I still can't get a bitmap from an Activity (the Image which extends Activity above).

Can someone help me ?

Thanks a lot.
cptpingu
Freshman
Freshman
 
Posts: 3
Joined: Fri May 09, 2008 6:30 pm

Postby cptpingu » Sun May 11, 2008 5:13 pm

I have no choice: I use awful global variable.

Thanks to the very reactiv comunity !
cptpingu
Freshman
Freshman
 
Posts: 3
Joined: Fri May 09, 2008 6:30 pm

Top

Return to Other Coding-Problems

Who is online

Users browsing this forum: No registered users and 13 guests