使用ava.awt.Graphics类中的 public abstract boolean drawImage(Image img,
int dx1,
int dy1,
int dx2,
int dy2,
int sx1,
int sy1,
int sx2,
int sy2,
Color bgcolor,
ImageObserver observer)
方法截图之后,再将图片压缩到指定大小。很容易出现截取的图片只占压缩后图片很小一部分,其他大部分都是黑边的情况。
经过求证,个人认为出现该情况的原因是:源矩形的第一个坐标被映射到目标矩形的第一个坐标,第二个源坐标被映射到第二个目标坐标。按需要缩放和翻转子图像以保持这些映射关系。
如果源矩形的第二个坐标与目标矩形的第二个坐标值相同,那么截取的图片将会填充目标矩形的一部分,等同于源矩形被截取的部分。而图片压缩时,会以原图片的尺寸作为参照来压缩,而截取的图片只占有原图尺寸的一小部分,所以大部分没有被覆盖到的像素就被黑色填充,所以压缩之后的图片会出现大量的黑边。
解决方案:将目标矩形的第二个坐标设置为原图片的相同位置的坐标即可。这样截取到的图片会自动填充到原图片大小,原图尺寸内就没有未被填充的像素,图片压缩之后就会不会出现黑边的情况了。
int dx1,
int dy1,
int dx2,
int dy2,
int sx1,
int sy1,
int sx2,
int sy2,
Color bgcolor,
ImageObserver observer)
方法截图之后,再将图片压缩到指定大小。很容易出现截取的图片只占压缩后图片很小一部分,其他大部分都是黑边的情况。
经过求证,个人认为出现该情况的原因是:源矩形的第一个坐标被映射到目标矩形的第一个坐标,第二个源坐标被映射到第二个目标坐标。按需要缩放和翻转子图像以保持这些映射关系。
如果源矩形的第二个坐标与目标矩形的第二个坐标值相同,那么截取的图片将会填充目标矩形的一部分,等同于源矩形被截取的部分。而图片压缩时,会以原图片的尺寸作为参照来压缩,而截取的图片只占有原图尺寸的一小部分,所以大部分没有被覆盖到的像素就被黑色填充,所以压缩之后的图片会出现大量的黑边。
解决方案:将目标矩形的第二个坐标设置为原图片的相同位置的坐标即可。这样截取到的图片会自动填充到原图片大小,原图尺寸内就没有未被填充的像素,图片压缩之后就会不会出现黑边的情况了。