桂林市中考信息网官网苏州市优化网站推广哪家好
news/
2025/10/5 16:21:04/
文章来源:
桂林市中考信息网官网,苏州市优化网站推广哪家好,哈尔滨网站建设 哈尔滨网站推广,揭阳响应式网站价格Android挖取原图手指触点区域RectF(并框线标记)放大到ImageView宽高与矩阵mapRadius#xff0c;Kotlin 这里 Android挖取原图中心区域RectF(并框线标记)放大到ImageView宽高#xff0c;Kotlin-CSDN博客 实现的是把原图中心区域的一片小图挖取出来放大放到下面的ImageView里面…Android挖取原图手指触点区域RectF(并框线标记)放大到ImageView宽高与矩阵mapRadiusKotlin 这里 Android挖取原图中心区域RectF(并框线标记)放大到ImageView宽高Kotlin-CSDN博客 实现的是把原图中心区域的一片小图挖取出来放大放到下面的ImageView里面现在不再固定中心位置而是以手指在上图的触点位置为中心位置挖取一片区域图放大然后放到下面的ImageView里面。 ?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:backgroundandroid:color/darker_grayandroid:orientationverticaltools:context.MainActivitycom.pkg.MyImageViewandroid:idid/ivandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:adjustViewBoundstrueandroid:clickabletrueandroid:scaleTypefitCenterandroid:srcmipmap/image /ImageViewandroid:idid/resultandroid:layout_widthmatch_parentandroid:layout_heightwrap_content //LinearLayout import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Matrix
import android.graphics.Paint
import android.graphics.Path
import android.graphics.RectF
import android.os.Bundle
import android.util.AttributeSet
import android.util.Log
import android.util.SizeF
import android.view.MotionEvent
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatImageView
import androidx.core.content.ContextCompat
import androidx.core.graphics.toRectclass MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val miv findViewByIdMyImageView(R.id.iv)val iv findViewByIdImageView(R.id.result)miv.setResultImage(iv)}
}class MyImageView : AppCompatImageView {private var W 0private var H 0private val mSizeF SizeF(400f, 200f)private var mOriginBmp: Bitmap? nullprivate var mPaint Paint()private var result: ImageView? nullprivate var mTouchX 0fprivate var mTouchY 0fprivate var mCanDraw falseprivate var mCircleRadius 30fconstructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) {mPaint.style Paint.Style.STROKEmPaint.strokeWidth 5fmPaint.isAntiAlias truemPaint.color Color.REDmOriginBmp getOriginalBitmap(ctx, R.mipmap.image)Log.d(fly, origin bmp w${mOriginBmp!!.width} h${mOriginBmp!!.height})}private fun getOriginalBitmap(ctx: Context, resId: Int): Bitmap {val options BitmapFactory.Options()options.inJustDecodeBounds true //只解析原始图片的宽高不decode原始文件装载到内存的Bitmap。BitmapFactory.decodeResource(resources, resId, options)//这一阶段最关键的是获取原始图的真实宽高。val srcBmpWidth options.outWidthval srcBmpHeight options.outHeightval d ContextCompat.getDrawable(ctx, resId)//根据原始图片的宽高创建一个空的Bitmapval bitmap Bitmap.createBitmap(srcBmpWidth, srcBmpHeight, Bitmap.Config.ARGB_8888)val canvas Canvas(bitmap)d?.setBounds(0, 0, srcBmpWidth, srcBmpHeight)d?.draw(canvas) //至此bitmap即为原始图片。return bitmap}override fun onTouchEvent(event: MotionEvent?): Boolean {if (event null) {return false}mTouchX event.xmTouchY event.ywhen (event.action) {MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL - {mCanDraw truemyInvalidate()}}return super.onTouchEvent(event)}private fun myInvalidate() {this.invalidate()}fun setResultImage(iv: ImageView) {result iv}override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {super.onSizeChanged(w, h, oldw, oldh)W wH hLog.d(fly, W$W H$H)}//从原始的Bitmap图中抠出一块SizeF大小的图。private fun getCenterBmp(): Bitmap {val bmp Bitmap.createBitmap(W, H, Bitmap.Config.ARGB_8888)val c Canvas(bmp)val dstRectF RectF(0f, 0f, bmp.width.toFloat(), bmp.height.toFloat())//需要特别注意要把手指在屏幕上触点坐标经过比例映射到原始图Bitmap的对应位置。val mapToOriginBmpX mOriginBmp!!.width * (mTouchX / W)val mapToOriginBmpY mOriginBmp!!.height * (mTouchY / H)val centerRectF RectF(mapToOriginBmpX - mSizeF.width / 2f,mapToOriginBmpY - mSizeF.height / 2f,mapToOriginBmpX mSizeF.width / 2f,mapToOriginBmpY mSizeF.height / 2f)c.drawBitmap(mOriginBmp!!, centerRectF.toRect(), dstRectF, null)val mx Matrix()mx.setScale(dstRectF.width() / centerRectF.width(), dstRectF.width() / centerRectF.width())//下面图中的中心圆圈。mPaint.color Color.YELLOWc.drawCircle(W / 2f, H / 2f,mx.mapRadius(mCircleRadius), //注意同步放大小图的圆圈半径。mPaint)return bmp}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)if (mCanDraw) {//绘制中心圆圈。mPaint.color Color.YELLOWcanvas.drawCircle(mTouchX, mTouchY, mCircleRadius, mPaint)drawRoundRectLine(canvas)result?.setImageBitmap(getCenterBmp())mCanDraw false}}private fun drawRoundRectLine(canvas: Canvas) {val lineRectF RectF(0f,0f,mSizeF.width,mSizeF.height)//原始图被Android系统拉伸放到屏幕上所以lineRectF也需要进行相同的拉伸。val originBmpSizeMapMatrix Matrix()originBmpSizeMapMatrix.setScale(getOriginBmpScaleToImageViewFactor(), getOriginBmpScaleToImageViewFactor())originBmpSizeMapMatrix.mapRect(lineRectF)lineRectF.offset(mTouchX - lineRectF.width() / 2f, mTouchY - lineRectF.height() / 2f)//绘制红色的lineRectF线框。val path Path()path.addRoundRect(lineRectF, 20f, 20f, Path.Direction.CW)mPaint.color Color.REDcanvas.drawPath(path, mPaint)}private fun getOriginBmpScaleToImageViewFactor(): Float {return (W.toFloat()) / (mOriginBmp!!.width)}
} 运行后点击上图不同位置点 Android BitmapFactory.decodeResource读取原始图片装载成原始宽高BitmapKotlin_bitmapfactory解码宽高-CSDN博客文章浏览阅读856次。文章浏览阅读1.8k次。/*Java代码 将Drawable转化为Bitmap */ Bitmap drawableToBitmap(Drawable drawable) { int width drawable.getIntrinsicWidth();Android Drawable 转化成 Bitmap-CSDN博客。_bitmapfactory解码宽高https://blog.csdn.net/zhangphil/article/details/134449577
Android挖取原图中心区域RectF(并框线标记)放大到ImageView宽高Kotlin-CSDN博客文章浏览阅读395次点赞11次收藏11次。文章浏览阅读853次。【代码】Android矩阵setRectToRect裁剪Bitmap原图Matrix放大mapRect标记中心区域Kotlin。Android BitmapFactory.decodeResource读取原始图片装载成原始宽高BitmapKotlin_bitmapfactory解码宽高-CSDN博客。Android矩阵setRectToRect裁剪Bitmap原图Matrix放大mapRect标记中心区域Kotlin-CSDN博客。https://blog.csdn.net/zhangphil/article/details/136157116
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928453.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!