OPhone中的图片{tx}处理(转) | 盈哲科技

在OPhone编程中有时候需要对图片做特殊的处理,比如将图片做出黑白的,或者老照片的效果,有时候还要对图片进行变换,以拉伸,扭曲等等。这些效果在OPhone中有很好的支持,通过颜色矩阵(ColorMatrix)和坐标变换矩阵(Matrix)可以xx的做出上面的所说的效果,下面将分别介绍这两个矩阵的用法和相关的函数。

  1. CMatrix类:
  2. public class CMatrix extends Activity?{
  3. private Button?change;
  4. private EditText?[]?et=new EditText[20];
  5. private float []carray=new float[20];
  6. private MyImage?sv;
  7. @Override
  8. public void onCreate(Bundle?savedInstanceState)?{
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.main);
  11. change=(Button)findViewById(R.id.set);
  12. sv=(MyImage)findViewById(R.id.MyImage);
  13. for(int i=0;i<20;i++){
  14. et[i]=(EditText)findViewById(R.id.indexa+i);
  15. carray[i]=Float.valueOf(et[i].getText().toString());
  16. }
  17. change.setOnClickListener(l);
  18. }
  19. private Button.OnClickListener?l=new Button.OnClickListener(){
  20. @Override
  21. public void onClick(View?arg0)?{
  22. //?TODO?Auto-generated?method?stub
  23. getValues();
  24. sv.setValues(carray);
  25. sv.invalidate();
  26. }
  27. };
  28. public void getValues(){
  29. for(int i=0;i<20;i++){
  30. carray[i]=Float.valueOf(et[i].getText().toString());
  31. }
  32. }
  33. }
  34. MyImage类继承自View类:
  35. public class MyImage extends View?{
  36. private Paint?mPaint?= new Paint(Paint.ANTI_ALIAS_FLAG);
  37. private Bitmap?mBitmap;
  38. private float []?array=new float[20];
  39. private float mAngle;
  40. public MyImage(Context?context,AttributeSet?attrs)?{
  41. super(context,attrs);
  42. mBitmap????=?BitmapFactory.decodeResource(context.getResources(),
  43. R.drawable.test);
  44. invalidate();
  45. }
  46. public void setValues(float []?a){
  47. for(int i=0;i<20;i++){
  48. array[i]=a[i];
  49. }
  50. }
  51. @Override protected void onDraw(Canvas?canvas)?{
  52. Paint?paint?=?mPaint;
  53. paint.setColorFilter(null);
  54. canvas.drawBitmap(mBitmap,?0, 0,?paint);
  55. ColorMatrix?cm?=?new ColorMatrix();
  56. //设置颜色矩阵
  57. cm.set(array);
  58. //颜色滤镜,将颜色矩阵应用于图片
  59. paint.setColorFilter(new ColorMatrixColorFilter(cm));
  60. //绘图
  61. canvas.drawBitmap(mBitmap,?0, 0,?paint);
  62. Log.i(“CMatrix”, “———>onDraw”);
  63. }
  64. }?
  1. CooMatrix 类:
  2. public class CooMatrix extends Activity?{
  3. private Button?change;
  4. private EditText?[]?et=new EditText[9];
  5. private float []carray=new float[9];
  6. private MyImage?sv;
  7. /**?Called?when?the?activity?is?first?created.?*/
  8. @Override
  9. public void onCreate(Bundle?savedInstanceState)?{
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.main);
  12. change=(Button)findViewById(R.id.set);
  13. sv=(MyImage)findViewById(R.id.MyImage);
  14. for(int i=0;i<9;i++){
  15. et[i]=(EditText)findViewById(R.id.indexa+i);
  16. carray[i]=Float.valueOf(et[i].getText().toString());
  17. }
  18. change.setOnClickListener(l);
  19. }
  20. private Button.OnClickListener?l=new Button.OnClickListener(){
  21. @Override
  22. public void onClick(View?arg0)?{
  23. //?TODO?Auto-generated?method?stub
  24. getValues();
  25. sv.setValues(carray);
  26. sv.invalidate();
  27. }
  28. };
  29. public void getValues(){
  30. for(int i=0;i<9;i++){
  31. carray[i]=Float.valueOf(et[i].getText().toString());
  32. }
  33. }
  34. }
  35. MyImage类继承自View类:
  36. public class MyImage extends View?{
  37. private Paint?mPaint?= new Paint(Paint.ANTI_ALIAS_FLAG);
  38. private Bitmap?mBitmap;
  39. private float []?array=new float[9];
  40. public MyImage(Context?context,AttributeSet?attrs)?{
  41. super(context,attrs);
  42. mBitmap?=?BitmapFactory.decodeResource(context.getResources(),
  43. R.drawable.ic_launcher_android);
  44. invalidate();
  45. }
  46. public void setValues(float []?a){
  47. for(int i=0;i<9;i++){
  48. array[i]=a[i];
  49. }
  50. }
  51. @Override protected void onDraw(Canvas?canvas)?{
  52. Paint?paint?=?mPaint;
  53. canvas.drawBitmap(mBitmap,?0, 0,?paint);
  54. //new?一个坐标变换矩阵
  55. Matrix?cm?=?new Matrix();
  56. //为坐标变换矩阵设置响应的值
  57. cm.setValues(array);
  58. //按照坐标变换矩阵的描述绘图
  59. canvas.drawBitmap(mBitmap,?cm,?paint);
  60. Log.i(“CMatrix”, “———>onDraw”);
  61. }
  62. }?
从上图标示出的坐标看出原图的(32,32)映射到原图的(32,32),(64,32)映射到原图(64,48)这样的效果是图像放大了而且 发生了旋转。这样的过程相当于(32,32)点不动,然后拉住图形(64,32)点并拉到(64,48)点处,这样图形必然会被拉伸放大并且发生旋转。最 后用一个平移将图形移动到右边现在的位置。希望能够好好理解这一过程,下面的3,4图是同样的道理。Matrix还有许多类似的Map方法可以做出许多效 果。详细可以参考Matrix类下的方法。

, , , ,

郑重声明:资讯 【OPhone中的图片{tx}处理(转) | 盈哲科技】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——