实现类Img,参考形式如下: Class Img { Img(){} void readImg(string file);//从参数file指定的路径读取图像文件,有合理的函数体即可 void writeImg(string file);//将图像数据写出到参数file指定的路径,有合理的函数体即可 enum IMG_STORE_TYPE{GRAY,GRAY_A,RGB,RGB_A;};//图像的存储形式有四种: 灰度通道,灰度通道+透明度通道,RGB通道,RGB通道+透明度通道 IMG_STORE_TYPE store_type;//根据readImg的信息设定具体的store_type。 short[] pixel_data;存储的像素颜色数据 Img UnaryOperation(ShortUnaryOperator unary_op); Img BinaryOperation(Img img, ShortBinaryOperator binary_op); } 实现方法UnaryOperation和BinaryOperation,根据上述图像运算关系的定义,对pixel_data中的数据进行遍历运算,参数img是另一个参与运算的相同大小的图像,binary_op是具体运算的形式,对UnaryOperation实现反色操作(使用颜色的最大值255减去当前像素值得到新的像素值),对BinaryOperation实现加减两种运算形式(减法结果小于0的情况,截断到0)。使用Java语言
时间: 2024-02-11 21:08:21 浏览: 49
爬虫+URL获取Img高宽
以下是参考实现代码:
```java
import java.io.*;
import java.util.function.*;
public class Img {
public Img() {
}
public void readImg(String file) {
// 从参数file指定的路径读取图像文件,有合理的函数体即可
}
public void writeImg(String file) {
// 将图像数据写出到参数file指定的路径,有合理的函数体即可
}
// 图像的存储形式有四种: 灰度通道,灰度通道+透明度通道,RGB通道,RGB通道+透明度通道
enum IMG_STORE_TYPE {GRAY, GRAY_A, RGB, RGB_A;}
// 根据readImg的信息设定具体的store_type。
IMG_STORE_TYPE store_type;
short[] pixel_data; // 存储的像素颜色数据
public Img UnaryOperation(ShortUnaryOperator unary_op) {
Img new_img = new Img();
new_img.store_type = this.store_type;
new_img.pixel_data = new short[this.pixel_data.length];
for (int i = 0; i < this.pixel_data.length; i++) {
new_img.pixel_data[i] = unary_op.applyAsShort(this.pixel_data[i]);
}
return new_img;
}
public Img BinaryOperation(Img img, ShortBinaryOperator binary_op) {
Img new_img = new Img();
new_img.store_type = this.store_type;
new_img.pixel_data = new short[this.pixel_data.length];
for (int i = 0; i < this.pixel_data.length; i++) {
short result = binary_op.applyAsShort(this.pixel_data[i], img.pixel_data[i]);
if (result < 0) {
result = 0;
}
new_img.pixel_data[i] = result;
}
return new_img;
}
public Img invertColor() {
return this.UnaryOperation(x -> (short) (255 - x));
}
public Img add(Img img) {
return this.BinaryOperation(img, (x, y) -> (short) (x + y));
}
public Img subtract(Img img) {
return this.BinaryOperation(img, (x, y) -> (short) (x - y));
}
}
```
上面的代码实现了 `Img` 类,其中实现了 `UnaryOperation` 和 `BinaryOperation` 方法,还实现了 `invertColor`、`add` 和 `subtract` 方法,分别对应了题目中要求实现的三种图像运算操作。
阅读全文