您的位置:

glide报错IllegalArgumentException("Cannot apply transformation on width: "+ outWidth+ " or height: "+ outHeight+ " less than or equal to zero and not Target.SIZE_ORIGINAL")怎么办

  发布时间:2025-03-18 09:19:29
问题原因是由于在使用Glide加载图片时,目标的宽度或高度被设置为小于等于零并且不是Target.SIZE_ORIGINAL,解决方案是确保目标宽度和高度的数值是合法的,即大于零的正整数,并设置一个默认的目标尺寸来避免异常。具体例子展示了正确使用Transformation和确保目标尺寸大于零的方法。

问题原因

IllegalArgumentException("Cannot apply transformation on width: "+ outWidth+ " or height: "+ outHeight+ " less than or equal to zero and not Target.SIZE_ORIGINAL")的出现是由于在使用Glide加载图片时,目标的宽度或高度被设置为小于等于零并且不是Target.SIZE_ORIGINAL。这种情况通常会导致无法正常对图片进行转换处理,从而触发IllegalArgumentException异常。Glide要求目标的宽度和高度必须大于零,或者设置为Target.SIZE_ORIGINAL代表保持原始尺寸。所以当目标尺寸小于等于零并且不是要保持原始尺寸时,就会抛出该异常。

解决方案

IllegalArgumentException("Cannot apply transformation on width: "+ outWidth+ " or height: "+ outHeight+ " less than or equal to zero and not Target.SIZE_ORIGINAL")这个异常通常是由于Glide加载图片时目标宽度或高度小于等于零而引起的。出现这个异常的原因是因为Glide要对图片进行一些变换操作,而当目标宽度或高度为零或负数时,Glide无法进行有效的变换。 要解决这个问题,需要确保在使用Glide加载图片时,目标宽度和高度的数值是合法的,即大于零的正整数。例如,可以检查图片加载的目标尺寸是否正确设置,以确保不会出现宽度或高度为零的情况。 另外,还可以设置一个默认的目标尺寸,当目标尺寸小于等于零时,使用默认的尺寸来加载图片,避免出现异常。 以下是一个示例代码片段,用于展示如何正确使用Glide加载图片并避免出现IllegalArgumentException异常:


int targetWidth = 200; // 设置目标宽度
int targetHeight = 300; // 设置目标高度

// 检查目标尺寸是否合法,如果小于等于零则设置为默认值
if(targetWidth <= 0 || targetHeight <= 0) {
    targetWidth = 200;
    targetHeight = 200;
}

// 使用Glide加载图片
Glide.with(context)
    .load(imageUrl)
    .override(targetWidth, targetHeight)
    .centerCrop()
    .into(imageView);

通过以上代码片段,可以确保在使用Glide加载图片时,目标宽度和高度不会小于等于零,从而避免IllegalArgumentException异常的发生。

具体例子

当使用 Glide 加载图片时,如果出现 IllegalArgumentException("Cannot apply transformation on width: "+ outWidth+ " or height: "+ outHeight+ " less than or equal to zero and not Target.SIZE_ORIGINAL") 异常,通常是因为在应用变换(Transformation)时,目标图片的宽度或高度小于等于零,而此时不能应用变换。这个问题通常出现在尝试对原始尺寸(Target.SIZE_ORIGINAL)以外的尺寸的图片应用变换时。 要避免这个异常,可以在 Glide 加载图片时,正确使用 Transformation,并确保目标尺寸大于零,或者使用 Target.SIZE_ORIGINAL 表示原始尺寸。下面是一个例子:


// 导入 Glide 库
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;

// 在代码中加载图片并应用变换
Glide.with(context)
    .load("https://www.example.com/image.jpg")
    .apply(new RequestOptions()
            .override(300, 300) // 设置目标尺寸
            .transform(new CenterCrop(), new RoundedCorners(16)) // 应用变换,这里尝试对目标尺寸为 300x300 的图片应用 CenterCrop 和 RoundedCorners 变换
    )
    .into(imageView);

在上面的代码示例中,我们使用 Glide 加载一张图片,并尝试对它应用 CenterCrop 和 RoundedCorners 变换。注意我们使用了 override 方法设置了目标尺寸为 300x300,确保了目标尺寸大于零。这样就可以避免出现 IllegalArgumentException 异常。