Bitmap.createBitmap java.lang.IllegalArgumentException: width and height must be > 0 问题解决

本文详细介绍了如何通过设置转换矩形区域和检查旋转角度来解决在图片旋转过程中出现的java.lang.IllegalArgumentException错误。通过在旋转前判断角度是否大于0,可以避免错误发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写了一个把图片旋转的方法,但是报错,java.lang.IllegalArgumentException: width and height must be > 0 

设置转换矩形区域,旋转时要判断旋转角度是否大于0后,就不在报错了


public static  void setDirectionImage(Context mActivity,ImageView image,double lat_a, double lng_a, double lat_b, double lng_b){
				Bitmap bitmap=((BitmapDrawable) mActivity.getResources().getDrawable(R.drawable.img_direction_bloginfo)).getBitmap();
				Matrix matrix = new Matrix(); 
				Bitmap bp;
				RectF rect = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());  
				matrix.setRectToRect(rect, rect, Matrix.ScaleToFit.CENTER);
				//设置图像的旋转角度              
				matrix.setRotate((float) gps2d( lng_a, lat_a,lng_b, lat_b));   
//				Log.i("info", "bitmap===="+"bitmap.getWidth():"+bitmap.getWidth()+" ;bitmap.getHeight():"+ bitmap.getHeight()+"matrix:"+gps2d( lng_a, lat_a,lng_b, lat_b));
					//旋转图像,并生成新的Bitmap对像
				bp=Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);          
					//重新在ImageView组件中显示旋转后的图像            
				image.setImageBitmap(bp);		
			}


/**
			 * 计算方位角pab。
			 * @param lat_a	A点的纬度
			 * @param lng_a	A点的经度
			 * @param lat_b	B点的纬度
			 * @param lng_b	B点的经度
			 * @return
			 */
		    public static  double gps2d(double lat_a, double lng_a, double lat_b, double lng_b) {
		    	if(lat_a==lat_b&&lng_a==lng_b){
		    		return 0;
		    	}
		       double d = 0;
		       lat_a=lat_a*Math.PI/180;
		       lng_a=lng_a*Math.PI/180;
		       lat_b=lat_b*Math.PI/180;
		       lng_b=lng_b*Math.PI/180;  
		        d=Math.sin(lat_a)*Math.sin(lat_b)+Math.cos(lat_a)*Math.cos(lat_b)*Math.cos(lng_b-lng_a);
		       d=Math.sqrt(1-d*d);
		       d=Math.cos(lat_b)*Math.sin(lng_b-lng_a)/d;
		       d=Math.asin(d)*180/Math.PI;   
		       return Math.abs(d);
		    }



在Vue3中,ref是一个函数,用于创建一个响应式的引用。它接受一个初始值作为参数,并返回一个可通过.value访问和修改值的对象。 例如,我们可以使用ref创建一个名为a的引用,并将其初始化为0: const a = ref(0); 我们可以通过访问a.value来获取或修改a的值: console.log(a.value); // 输出0 a.value = 1; console.log(a.value); // 输出1 除了基本类型外,我们还可以为ref的值指定更复杂的类型。可以使用Ref类型来明确指定ref内的值的类型。 例如,我们可以创建一个引用,其值可以是字符串或数字: import type { Ref } from 'vue'; const year: Ref<string | number> = ref('2020'); year.value = 2020; // 成功! 在模板中使用ref时,需要注意自动"解包"只适用于ref作为模板渲染上下文的顶层属性的情况。如果ref是嵌套在对象中的属性,则需要手动解包。 例如,在模板中使用obj.count时,需要通过obj.count.value来访问ref的值: <script setup> import { ref } from 'vue'; const obj = { count: ref(1) } </script> <template> <div>{{ obj.count.value }}</div> </template> 这样,我们就可以正确地使用Vue3中的ref了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue3超详细的ref()用法,看这一篇就够了](https://blog.csdn.net/EchoLiner/article/details/130445600)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值