Shader -> BitmapShader贴图着色器详解

news/2025/1/15 23:59:12 标签: 贴图, 着色器, android, android studio, kotlin, 开发语言

XML文件

<?xml version="1.0" encoding="utf-8"?>
<com.example.myapplication.MyView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

自定义View代码

kotlin">class MyView @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {

    private var mDrawRect = RectF()
    private var mDrawPaint = Paint()
    private var mOriginBitmap = BitmapFactory.decodeResource(resources, R.drawable.bitmap_shader)
    private var mScaleBitmap : Bitmap ?= null
    private var mDrawShader : BitmapShader ?= null
    private val targetWidth = 300
    private val targetHeight = 300

    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
        super.onSizeChanged(w, h, oldw, oldh)
        mDrawRect = RectF(0f, 0f, w.toFloat(), h.toFloat())

        mScaleBitmap = Bitmap.createScaledBitmap(mOriginBitmap, targetWidth, targetHeight, true)

        mScaleBitmap?.let {
            mDrawShader = BitmapShader(it, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT)
        }

        mDrawPaint.shader = mDrawShader
    }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        mDrawPaint?.let {
            canvas.drawRect(mDrawRect, it)
        }
    }
}

BitmapShader贴图着色器参数详解

  • BitmapShader贴图着色器赋值给Paint画笔,可以使用Canvas画布和Paint画笔绘制具有贴图Bitmap的内容,包括Rect,Paint,Path,Circle

构造函数

kotlin">public BitmapShader(Bitmap bitmap, // 要用作着色器的位图
                    Shader.TileMode tileX, // X方向的平铺模式
                    Shader.TileMode tileY) // Y方向的平铺模式
  • Bitmap:指定要使用的位图Bitmap
  • TileMode:指定在XY方向上图像的重复或填充模式,可以是以下三种之一:
    • Shader.TileMode.CLAMP:边缘填充模式,使用边缘颜色填充
    • Shader.TileMode.REPEAT:重复填充模式,重复图像
    • Shader.TileMode.MIRROR:镜像填充模式,图像交替翻转

映射方式Shader.TileMode决定了这张Bitmap如何绘制到着色器绘制区域上

  • 着色器绘制区域是使用Canvas画布的大小,往往比这张Bitmap的区域大得多

x轴上: Shader.TileMode.CLAMP, y轴上: Shader.TileMode.CLAMP

  • 作用:这张Bitmap只会在x轴和y轴上绘制一次,剩余的绘制区域用这张Bitmap的边缘颜色去拉伸填充
    在这里插入图片描述

x轴上: Shader.TileMode.REPEAT, y轴上: Shader.TileMode.REPEAT

  • 作用:这张Bitmap只会在x轴和y轴上多次绘制,剩余的绘制区域用这张Bitmap重复填充,不修改Bitmap的方向
    在这里插入图片描述

x轴上: Shader.TileMode.REPEAT, y轴上: Shader.TileMode.REPEAT

  • 作用:这张Bitmap只会在x轴和y轴上多次绘制,剩余的绘制区域用这张Bitmap重复填充,修改Bitmap的方向,x轴上绘制的Bitmap是x轴上一次绘制的Bitmap的镜像对称Bitmap,y轴上绘制的Bitmap是y轴上一次绘制的Bitmap的镜像对称Bitmap
    在这里插入图片描述

http://www.niftyadmin.cn/n/5824473.html

相关文章

Vmware虚拟机centos扩展硬盘空间

一&#xff0c;调整硬盘大小 关闭虚拟机后才可以调整&#xff0c;否则 扩展 按钮是灰色的 扩展后&#xff0c;会弹出如下提示&#xff1a; 二&#xff0c;系统内部扩展 1. 知识铺垫 如果熟悉 Part(分区)、PV(物理卷)、VG&#xff08;卷组&#xff09;、LV&#xff08;逻辑…

C# 配置文件:app.config 和 web.config

一、引言 在 C# 的应用开发中&#xff0c;配置文件就像是幕后的大管家&#xff0c;默默管理着应用程序的各种设置。今天&#xff0c;我们就来深入探索一下 C# 中极为重要的两个配置文件&#xff1a;app.config 和 web.config。无论是开发 Windows 应用程序&#xff0c;还是构建…

【Rust自学】12.2. 读取文件

12.2.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)&#xff0c;是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步&#xff1a; 接收命令行参数读…

CVPR 2024 3D方向总汇包含(3DGS、三维重建、深度补全、深度估计、全景定位、表面重建和特征匹配等)

1、3D方向 Rapid 3D Model Generation with Intuitive 3D InputInstantaneous Perception of Moving Objects in 3DNEAT: Distilling 3D Wireframes from Neural Attraction Fields ⭐codeSculpting Holistic 3D Representation in Contrastive Language-Image-3D Pre-trainin…

python识别图片中指定颜色的图案并保存为图片

示例代码&#xff1a; def chuli(color):import cv2import numpy as np# 定义颜色名称到HSV阈值范围的映射color_thresholds {red: ([0, 100, 100], [10, 255, 255], [160, 100, 100], [180, 255, 255]),yellow: ([20, 100, 100], [30, 255, 255]),blue: ([90, 100, 100], [1…

安装软件缺少msvcp110.dll怎么办?出现dll丢失的解决方法

在日常使用电脑安装各类软件的过程中&#xff0c;相信不少朋友都遇到过 “缺少 msvcp110.dll” 的报错提示 。下面就来深入聊聊这个 msvcp110.dll 文件&#xff0c;以及当它缺失时&#xff0c;我们该如何巧妙应对。 一、msvcp110.dll 文件介绍 1.1 定义与功能 msvcp110.dll 是…

Transformer架构和Transformers 库和Hugging Face

Transformer架构 和 Hugging Face 之间的关系非常紧密&#xff0c;Hugging Face 是推动 Transformer 架构普及和应用的重要力量。以下是两者的关系及其具体联系&#xff1a; 1. Transformer 架构 背景: Transformer 是由 Google 在 2017 年提出的革命性架构&#xff0c;基于自…

nvm use使用nodejs版本时报错

文章目录 报错原因分析解决方法 报错 nvm use报错出现乱码&#xff1a; 比如nvm use 22.12.0&#xff0c;出现下面报错&#xff1a; exit status 1: ‘D:\Program’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&…