RescaleOp是java.awt.image包中的一个类,它实现了BufferedImageOp和RasterOp接口。该类通过将每个像素的样本值乘以比例因子然后添加偏移量来对源图像中的数据执行 pixel-by-pixel 重新缩放。缩放后的样本值被裁剪为目标图像中的最小/最大表示。该类用于图片处理。
- 为了光栅,重新缩放在频带上进行。缩放常数组的数量可以是一组,在这种情况下,相同的常数应用于所有波段,或者它必须等于源栅格波段的数量。
- 为了BufferedImages,重新缩放对颜色进行操作。缩放常数组的数量可以是一组,在这种情况下,相同的常数被应用于所有颜色分量。
- 图像带有IndexColorModel无法重新缩放。
- 如果一个RenderingHints在构造函数中指定对象,当需要进行颜色转换时,可以使用颜色渲染提示和抖动提示。
用法:
public class RescaleOp extends Object implements BufferedImageOp, RasterOp
构造函数:
- public RescaleOp(float[]scaleFactors,float[]offsets,RenderingHintshints):具有所需比例因子和偏移量的构造函数。提示可以为空。
- 公共RescaleOp(浮点比例因子,浮点偏移量,RenderingHints提示):具有单个比例因子和偏移量的构造函数。提示可以为空。
方法:
- BufferedImage createCompatibleDestImage?(BufferedImage src,ColorModel destCM):此方法创建具有正确大小和波段数量的归零目标图像。
- WritableRaster createCompatibleDestRaster?(栅格源):给定此源,此方法将创建具有正确大小和波段数的 zeroed-destination 栅格。
- BufferedImage 过滤器?(BufferedImage src,BufferedImage dst):此方法重新缩放源 BufferedImage。
- WritableRaster 过滤器?(光栅源,WritableRaster dst):此方法重新缩放源栅格中的像素数据。
- Rectangle2D getBounds2D?(BufferedImage src):此方法返回重新缩放的目标图像的边界框。
- Rectangle2D getBounds2D?(光栅源):此方法返回重新缩放的目标栅格的边界框。
- int getNumFactors?():此方法返回此 RescaleOp 中使用的缩放因子和偏移量的数量。
- float[] getOffsets?(float[] 偏移量):此方法返回给定数组中的偏移量。
- Point2D getPoint2D?(Point2D srcPt,Point2D dstPt):此方法返回给定源中的点的目标点的位置。
- RenderingHints getRenderingHints?():此方法返回此操作的渲染提示。
- float[] getScaleFactors?(float[] scaleFactors):此方法返回给定数组中的比例因子。
示例 1:在给定的示例中,我们将使用单个比例因子和偏移量设置图片的对比度。以下代码会将亮度降低 25%,并使像素变暗 3.6 倍。
Java
import java.awt.image.*;
import java.net.*;
import java.awt.*;
import java.io.*;
import javax.imageio.*;
public class DemonRescaleop {
public static void main(String[] args) throws Exception
{
// picking the image from the url
URL url
= new URL("https:// media.geeksforgeeks.org"
+ "/wp-content/uploads/geeksforgeeks-9.png");
// Reading the image from url
Image image = ImageIO.read(url);
// Setting up the scaling and
// the offset parameters for processing
RescaleOp rop = new RescaleOp(.75f, 3.6f, null);
// applying the parameters on the image
// by using filter() method, it takes the
// Source and destination objects of buffered reader
// here our destination object is null
BufferedImage bi
= rop.filter((BufferedImage)image, null);
ImageIO.write(bi, "png",
new File("processed.png"));
}
}
输入:
原始图像
输出:
processed.png
使用的方法 filter(BufferedImage src, BufferedImage dst) 将源 BufferedImage 重新缩放到目标 BufferedImage 并返回相同的值。这里我们没有提到任何目标图像并用 null 代替它。在这里,我们为 BufferedImage 对象分配了重新缩放的结果。示例 2:在给定的示例中,我们将使用比例因子和偏移量数组设置图片的对比度。每个数组的大小为 3,表示每个像素的红色、绿色和蓝色分量。在以下代码中,整体亮度增加了 45%,并且所有像素颜色都向绿色移动。偏移量 150 会使每个像素的绿色分量增加 58.6% (150/256)。请记住,偏移量会添加到颜色值中,因此必须是 0 到 255 之间的值,这与比例因子相反,比例因子充当百分比。
Java
import java.awt.image.*;
import java.net.*;
import java.awt.*;
import java.io.*;
import javax.imageio.*;
public class DemonRescaleop {
public static void main(String[] args) throws Exception
{
// picking the image from the URL
URL url
= new URL("https:// media.geeksforgeeks.org"
+ "/wp-content/uploads/geeksforgeeks-9.png");
// Reading the image from url
Image image = ImageIO.read(url);
// Setting up the scaling and
// the offset parameters for processing
float[] factors = new float[] {
// RGB each value for 1 color
1.45f, 1.45f, 1.45f
};
float[] offsets = new float[] {
0.0f, 150.0f, 0.0f
};
RescaleOp rop
= new RescaleOp(factors, offsets, null);
// applying the parameters on the image
// by using filter() method, it takes the
// Source and destination objects of buffered reader
// here our destination object is null
BufferedImage bi
= rop.filter((BufferedImage)image, null);
ImageIO.write(bi, "png",
new File("processed.png"));
}
}
输入:
原始图像
输出:
processed.png
使用的方法过滤器(BufferedImage src,BufferedImage dst)将源 BufferedImage 重新调整为目标 BufferedImage 并返回相同的值。这里我们没有提到任何目标图像并用 null 代替它。在这里,我们为 BufferedImage 对象分配了重新缩放的结果。参考: https://docs.oracle.com/javase/9/docs/api/java/awt/image/RescaleOp.html
相关用法
- Java Java.io.BufferedInputStream.available()用法及代码示例
- Java Java.io.BufferedInputStream.close()用法及代码示例
- Java Java.io.BufferedInputStream.read()用法及代码示例
- Java Java.io.BufferedInputStream.reset()用法及代码示例
- Java Java.io.BufferedInputStream.skip()用法及代码示例
- Java Java.io.BufferedOutputStream.flush()用法及代码示例
- Java Java.io.BufferedOutputStream.Write()用法及代码示例
- Java Java.io.BufferedReader.Close()用法及代码示例
- Java Java.io.BufferedReader.mark()用法及代码示例
- Java Java.io.BufferedReader.markSupported()用法及代码示例
- Java Java.io.BufferedReader.read()用法及代码示例
- Java Java.io.BufferedReader.readline()用法及代码示例
- Java Java.io.BufferedReader.ready()用法及代码示例
- Java Java.io.BufferedReader.reset()用法及代码示例
- Java Java.io.BufferedReader.skip()用法及代码示例
- Java Java.io.BufferedWriter.close()用法及代码示例
- Java Java.io.BufferedWriter.flush()用法及代码示例
- Java Java.io.BufferedWriter.newLine()用法及代码示例
- Java Java.io.BufferedWriter.write()用法及代码示例
- Java Java.io.ByteArrayInputStream.available()用法及代码示例
- Java Java.io.ByteArrayInputStream.close()用法及代码示例
- Java Java.io.ByteArrayInputStream.mark()用法及代码示例
- Java Java.io.ByteArrayInputStream.read()用法及代码示例
- Java Java.io.ByteArrayInputStream.reset()用法及代码示例
- Java Java.io.ByteArrayInputStream.skip()用法及代码示例
注:本文由纯净天空筛选整理自piyush25pv大神的英文原创作品 Java.awt.image.RescaleOp Class in Java with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。