{"id":1315,"date":"2021-04-05T00:14:13","date_gmt":"2021-04-04T16:14:13","guid":{"rendered":"https:\/\/badgameshow.com\/fly\/?p=1315"},"modified":"2021-04-05T00:17:40","modified_gmt":"2021-04-04T16:17:40","slug":"android-colormatrix-%e5%9c%96%e7%89%87%e6%bf%be%e9%8f%a1-%e8%89%b2%e8%aa%bf%e9%a3%bd%e5%92%8c%e5%ba%a6%e4%ba%ae%e5%ba%a6","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/fly\/android-colormatrix-%e5%9c%96%e7%89%87%e6%bf%be%e9%8f%a1-%e8%89%b2%e8%aa%bf%e9%a3%bd%e5%92%8c%e5%ba%a6%e4%ba%ae%e5%ba%a6\/","title":{"rendered":"Android ColorMatrix \u5716\u7247\u6ffe\u93e1 \u8272\u8abf&#038;\u98fd\u548c\u5ea6&#038;\u4eae\u5ea6"},"content":{"rendered":"<h1>Android ColorMatrix \u5716\u7247\u6ffe\u93e1 \u8272\u8abf&#038;\u98fd\u548c\u5ea6&#038;\u4eae\u5ea6 <\/h1>\n<h4>\u6587\u7ae0\u76ee\u9304<\/h4>\n<ol>\n<li><a href=\"https:\/\/badgameshow.com\/fly\/android-colormatrix-\u5716\u7247\u6ffe\u93e1-\u8272\u8abf\u98fd\u548c\u5ea6\u4eae\u5ea6\/fly\/android\/#a\">\u8a2d\u5b9a\u4e09\u500bSeekBar\u7684\u9810\u8a2d\u503c\u548c\u6700\u5927\u503c\u4e26\u76e3\u807d<\/a><\/li>\n<li><a href=\"https:\/\/badgameshow.com\/fly\/android-colormatrix-\u5716\u7247\u6ffe\u93e1-\u8272\u8abf\u98fd\u548c\u5ea6\u4eae\u5ea6\/fly\/android\/#b\">SeekBar\u76e3\u807d\u4e8b\u4ef6<\/a><\/li>\n<li><a href=\"https:\/\/badgameshow.com\/fly\/android-colormatrix-\u5716\u7247\u6ffe\u93e1-\u8272\u8abf\u98fd\u548c\u5ea6\u4eae\u5ea6\/fly\/android\/#c\">\u5275\u5efa\u65b0\u5716\u7247\u4e26\u5132\u5b58<\/a><\/li>\n<li><a href=\"https:\/\/badgameshow.com\/fly\/android-colormatrix-\u5716\u7247\u6ffe\u93e1-\u8272\u8abf\u98fd\u548c\u5ea6\u4eae\u5ea6\/fly\/android\/#d\">\u6548\u679c\u5c55\u793a<\/a><\/li>\n<li><a href=\"https:\/\/badgameshow.com\/fly\/android-colormatrix-\u5716\u7247\u6ffe\u93e1-\u8272\u8abf\u98fd\u548c\u5ea6\u4eae\u5ea6\/fly\/android\/#d\">Github<\/a><\/li>\n<\/ol>\n<hr \/>\n<p><a id=\"a\"><\/a><\/p>\n<h3>1.\u8a2d\u5b9a\u4e09\u500bSeekBar\u7684\u9810\u8a2d\u503c\u548c\u6700\u5927\u503c\u4e26\u76e3\u807d<\/h3>\n<pre><code class=\"language-Kotlin line-numbers\">const val MID_VALUE = 128\nprivate lateinit var seekBarRotate: SeekBar\nprivate lateinit var seekBarSaturation: SeekBar\nprivate lateinit var seekBarScale: SeekBar\n\n\/\/\u8272\u8abfSeekBar\nseekBarRotate = findViewById(R.id.seekBar_rotate)\nseekBarRotate.max = 255\nseekBarRotate.progress = MID_VALUE\n\n\/\/\u98fd\u548c\u5ea6SeekBar\nseekBarSaturation = findViewById(R.id.seekBar_saturation)\nseekBarSaturation.max = 255\nseekBarSaturation.progress = MID_VALUE\n\n\/\/\u4eae\u5ea6SeekBar\nseekBarScale = findViewById(R.id.seekBar_scale)\nseekBarScale.max = 255\nseekBarScale.progress = MID_VALUE\n\n\/\/SeekBar\u76e3\u807d\nseekBarRotate.setOnSeekBarChangeListener(this)\nseekBarSaturation.setOnSeekBarChangeListener(this)\nseekBarScale.setOnSeekBarChangeListener(this)\n<\/code><\/pre>\n<p><a id=\"b\"><\/a><\/p>\n<h3>2.SeekBar\u76e3\u807d\u4e8b\u4ef6<\/h3>\n<pre><code class=\"language-Kotlin line-numbers\">\/\/\u8272\u8abf\nprivate val rotateMatrix = ColorMatrix()\n\/\/\u98fd\u548c\u5ea6\nprivate val saturationMatrix = ColorMatrix()\n\/\/\u4eae\u5ea6\nprivate val scaleMatrix = ColorMatrix()\n\/\/\u4e09\u5408\u4e00\nprivate val colorMatrix = ColorMatrix()\n\noverride fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {\n    when (seekBar.id) {\n        R.id.seekBar_rotate -> {\n            val mHue = (progress - MID_VALUE).toFloat() \/ MID_VALUE * 180\n            rotateMatrix.reset()\n            rotateMatrix.setRotate(0, mHue)\n            rotateMatrix.setRotate(1, mHue)\n            rotateMatrix.setRotate(2, mHue)\n        }\n        R.id.seekBar_saturation -> {\n            val mSaturation = progress \/ MID_VALUE.toFloat()\n            saturationMatrix.reset()\n            saturationMatrix.setSaturation(mSaturation)\n        }\n        R.id.seekBar_scale -> {\n            val mBrightness = progress \/ MID_VALUE.toFloat()\n            scaleMatrix.reset()\n            scaleMatrix.setScale(mBrightness, mBrightness, mBrightness, 1f)\n        }\n    }\n\n    colorMatrix.reset()\n    colorMatrix.postConcat(rotateMatrix)\n    colorMatrix.postConcat(saturationMatrix)\n    colorMatrix.postConcat(scaleMatrix)\n    oldImage.colorFilter = ColorMatrixColorFilter(colorMatrix)\n}\n\noverride fun onStartTrackingTouch(seekBar: SeekBar?) {\n\n}\n\noverride fun onStopTrackingTouch(seekBar: SeekBar?) {\n\n}\n<\/code><\/pre>\n<p><a id=\"c\"><\/a><\/p>\n<h3>3.\u5275\u5efa\u65b0\u5716\u7247\u4e26\u5132\u5b58<\/h3>\n<pre><code class=\"language-Kotlin line-numbers\">\/\/\u539f\u5716\nprivate lateinit var bitmap: Bitmap\n\/\/\u65b0\u5716\u7247\nprivate lateinit var newImage: ImageView\n\nfun saveBitmap(view: View) {\n    bitmap = BitmapFactory.decodeResource(resources, R.drawable.girl)\n    \/\/\u65b0\u5716\u653e\u5230\u756b\u5e03\u4e0a\n    val newBitmap = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)\n    val canvas = Canvas(newBitmap)\n\n    \/\/\u8a2d\u5b9a\u756b\u7b46\u53c3\u6578(\u628a\u525b\u525b\u8a2d\u5b9a\u7684\u4e09\u5408\u4e00\u53c3\u6578\u7d66\u756b\u7b46)\n    val paint = Paint(Paint.ANTI_ALIAS_FLAG)\n    paint.colorFilter = ColorMatrixColorFilter(colorMatrix)\n\n    canvas.drawBitmap(bitmap, 0f, 0f, paint)\n\n    val file = File(externalCacheDir, \"matrixGirl.jpg\")\n    val ops = FileOutputStream(file)\n    newBitmap.compress(Bitmap.CompressFormat.JPEG, 100, ops)\n\n    newImage = findViewById(R.id.newImage)\n    newImage.setImageBitmap(newBitmap)\n}\n<\/code><\/pre>\n<p><a id=\"d\"><\/a><\/p>\n<h3>4.\u6548\u679c\u5c55\u793a<\/h3>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2021\/04\/20210405_000957.gif\"><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2021\/04\/20210405_000957-142x300.gif\" alt=\"\" \/><\/a><\/p>\n<p><a id=\"e\"><\/a><\/p>\n<h3>5.Github<\/h3>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/github.com\/MuHongWeiWei\/ColorMatrixDemo\" title=\"ColorMatrixDemo\" target=\"_blank\" rel=\"noopener\">ColorMatrixDemo<\/a><\/p>\n\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>Android ColorMatrix \u5716\u7247\u6ffe\u93e1 \u8272\u8abf&#038;\u98fd\u548c\u5ea6&#038;\u4eae\u5ea6 \u6587\u7ae0\u76ee\u9304 \u8a2d\u5b9a\u4e09\u500bS &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[5],"tags":[13,179,15],"class_list":["post-1315","post","type-post","status-publish","format-standard","hentry","category-android","tag-android","tag-colormatrix","tag-kotlin"],"_links":{"self":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/comments?post=1315"}],"version-history":[{"count":3,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1315\/revisions"}],"predecessor-version":[{"id":1319,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1315\/revisions\/1319"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/media?parent=1315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/categories?post=1315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/tags?post=1315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}