关于java截图并压缩的一个小问题的个人理解

阅读更多
使用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)
方法截图之后,再将图片压缩到指定大小。很容易出现截取的图片只占压缩后图片很小一部分,其他大部分都是黑边的情况。
  经过求证,个人认为出现该情况的原因是:源矩形的第一个坐标被映射到目标矩形的第一个坐标,第二个源坐标被映射到第二个目标坐标。按需要缩放和翻转子图像以保持这些映射关系。
  如果源矩形的第二个坐标与目标矩形的第二个坐标值相同,那么截取的图片将会填充目标矩形的一部分,等同于源矩形被截取的部分。而图片压缩时,会以原图片的尺寸作为参照来压缩,而截取的图片只占有原图尺寸的一小部分,所以大部分没有被覆盖到的像素就被黑色填充,所以压缩之后的图片会出现大量的黑边。

解决方案:将目标矩形的第二个坐标设置为原图片的相同位置的坐标即可。这样截取到的图片会自动填充到原图片大小,原图尺寸内就没有未被填充的像素,图片压缩之后就会不会出现黑边的情况了。

你可能感兴趣的:(awt,drawimage,image)