这个问题涉及图片呈现的一整套方案。归纳而言这个问题是:给定任意尺寸的图片如何在任意尺寸分辨率的机器上显示?并且能够保持图片原来的清晰度。一般采用如下方案来解决这个问题:
我们提供的服务有:网站设计、成都网站制作、微信公众号开发、网站优化、网站认证、沿滩ssl等。为上千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的沿滩网站制作公司
1、首先给原图片创建一块内存缓存副本。如果不创建缓存的话,那么任何一次图片的剪切、缩放等操作都将丢失图片信息,使得保持原有图片的滋味那是不可能的。当然对于一般的程序而言,这个操作只需要调用简单的API即可完成。例如Android,只需要创建一个对应图片的Bitmap对象即可。
2、如果想要在设备显示的初始化状态图片即为满屏,那么必须调用相关API动态获得设备的分辨率。然后按设备分辨率的大小对图片进行剪切并显示到设备上。
注意:在获得图片分辨率后,如果分辨率大于图片,那不用说,直接显示图片就好。但是如果小于图片,此时有多种选择。可以将图片缩放至屏幕分辨率(图片纵横比可能失真)也可以选择剪切图片的一部分显示到屏幕上。
3、对图片进行缩放或者移动
我们在图片第一次显示的时候无论是选择缩放还是剪切,都要记录下图片被缩放的比例或者剪辑的范围。这样在用户再次移动或者缩放的时候,根据之前的缩放比例和移动坐标,计算当前应该移动的位置和缩放比例。并且根据计算结果对缓存的图片进行剪辑并显示到屏幕上。
其实整个过程可以概括为如下流程:
——图片的初始缩放比例和显示起点坐标——用户触发缩放或者移动操作——计算新的图片缩放比例和显示起点坐标——根据新的缩放比例和显示起点坐标剪辑缓存图片并绘制到屏幕上......
那是肯定要被放大的,这是android 开发包的机制,自适应屏幕,自动放大缩小图片。
res文件夹下不是有“hdpi”,"ldpi","mdpi"三个文件夹吗~你把相关何时分辨率的图片放入相关文件夹,这样图片的放大缩小误差率就减少了。
如果只想放一张图片,而且不想让图片放大,你就用自带的SDK自带的9patch处理下吧。拉伸的内容设置为透明,就行了。
其实如果图片像素比较高的话是不会影响他的清晰度的,一般都是用的bitmap位图,矩阵像素。所以你要求图片放大后还是很清晰,那么只能要求原图片的像素比较高,而并不能通过其他的操作来实现清晰度的变化!
是要编写一个这样的功能么,android提供的API里面一般图片都是Bitmap,可以通过Canvas.drawBItMap的方法在View进行图片的绘制,在方法中需要进行传入一个类型为Matrix的参数,设置Martrix的一些参数就可以进行图片的放大的绘制,这只是显示,也就是MVC中的View层,然后通过提供的一些触摸函数的重写并实现自己需要的一些功能,如拖动,实际上就是改变BitMap绘制的位置。关于触摸的处理和图片的绘制可以在网上进行一些教程的搜索,我就不罗列了,最终就是需要通过控制函数来改变图片的绘制方式,这也许就是你所需要的功能。
先上效果图
1.为了实现图片的放到缩小,我选择了 PhotoView 框架用于显示图片。
2.使用 Glide 框架加载图片
3.实现原理:
通过自定义View继承FrameLayout,以PhotoView作为背景,动态添加ImageView作为点。
4.主要分析:
1)标签随图片移动:通过实现PhotoView的OnMatrixChangedListener接口,监听图片的位置及大小,动态设置标签的位置
2)点击图片任意位置,在此位置生成标签,
3)标签添加后,会导致布局重新测量,此时会导致已经放大的图片回到初始的位置及大小,在onLayout方法中重新设置photoView的Matrix。
矩形框的实现原理类似,难点就是在给icon添加了移动监听,保证icon可随处移动
下面是源码地址
使用位图(Bitmap)再重新绘制遍
//原位图
Bitmap btm1 = BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.hh);
BitmapDrawable bd1=BitmapDrawable(btm1);
imageView.setBackgroundDrawable(bd1);
放大后 滑动时计算 图片的边是否在屏幕外,如果在屏幕外就可移动,比如 向上滑动,是想看图片下面的部分,此时计算图片的底边是否在屏幕外,如果是,就可以向上移动图片。
Scaletype的设置的方式包括:
1、在layout xml中定义android:scaleType="CENTER"
2、或在代码中调用imageView.setScaleType(ImageView.ScaleType.CENTER);
扩展资料:
根据位深度,可将位图分为1、4、8、16、24及32位图像等。每个像素使用的信息位数越多,可用的颜色就越多,颜色表现就越逼真,相应的数据量越大。
例如,位深度为 1 的像素位图只有两个可能的值(黑色和白色),所以又称为二值位图。位深度为 8 的图像有 2^8(即 256)个可能的值。位深度为 8 的灰度模式图像有 256 个可能的灰色值。
RGB图像由三个颜色通道组成。8 位/通道的 RGB 图像中的每个通道有 256 个可能的值,这意味着该图像有 1600 万个以上可能的颜色值。
有时将带有 8 位/通道 (bpc) 的 RGB 图像称作 24 位图像(8 位 x 3 通道 = 24 位数据/像素)。通常将使用24位RGB组合数据位表示的的位图称为真彩色位图。
参考资料来源:百度百科-Bitmap