0 前言
直接开始,需要的自取。
1 Show Code
- 图片转灰度数组
public static int[][] getPgmArray(Bitmap bitmap) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
int[][] imgArray = new int[h][w];
//读取顺序是从上到下,从左到右
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
int p = bitmap.getPixel(i, j);
int a = (p >> 24) & 0xff;
int r = (p >> 16) & 0xff;
int g = (p >> 8) & 0xff;
int b = p & 0xff;
int avg = (r + g + b) / 3;
imgArray[j][i] = avg;
}
}
return imgArray;
}
- 拼接PGM
private static final String MAGIC = "P5";
private static final char COMMENT = '#';
private static final int MAXVAL = 255;
public static String write(final int[][] image, final File file, final int maxval) throws IOException {
if (maxval > MAXVAL)
throw new IllegalArgumentException("The maximum gray value cannot exceed " + MAXVAL + ".");
}
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(file));
try {
stream.write(MAGIC.getBytes(StandardCharsets.UTF_8));
stream.write("\n".getBytes());
stream.write(Integer.toString(image[0].length).getBytes());
stream.write(" ".getBytes());
stream.write(Integer.toString(image.length).getBytes());
stream.write("\n".getBytes());
stream.write(Integer.toString(maxval).getBytes());
stream.write("\n".getBytes());
for (int i = 0; i < image.length; i++) {
for (int j = 0; j < image[0].length; j++) {
final int p = image[i][j];
if (p < 0 || p > maxval) {
throw new IOException("Pixel value " + p + " outside of range [0, " + maxval + "].");
}
stream.write(image[i][j]);
}
}
} catch (Exception e) {
} finally {
stream.close();
}
}
2 ChatGPT怎么写
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Environment;
import java.io.File;
import java.io.FileOutputStream;
public class JpgToPgmConverter {
public static void convertJpgToPgm(String jpgFileName, String pgmFileName) {
// 获取JPG文件路径
String path = Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator + jpgFileName;
File jpgFile = new File(path);
try {
// 读取JPG文件
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(jpgFile.getAbsolutePath(), options);
// 创建PGM文件
File pgmFile = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + File.separator + pgmFileName);
// 将Bitmap对象转换为PGM文件
FileOutputStream out = new FileOutputStream(pgmFile);
out.write(String.format("P2\n%d %d\n255\n", bitmap.getWidth(), bitmap.getHeight())
.getBytes());
for (int i = 0; i < bitmap.getHeight(); i++) {
for (int j = 0; j < bitmap.getWidth(); j++) {
int color = bitmap.getPixel(j, i);
// 使用平均亮度计算灰度值
int gray = (Color.red(color) + Color.green(color) + Color.blue(color)) / 3;
out.write(String.format("%d ", gray).getBytes());
}
out.write("\n".getBytes());
}
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 用GPT补充一个PGM转PNG/JPG
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.io.FileOutputStream;
public class PgmToPngConverter {
public static void convertPgmToPng(String pgmFileName, String pngFileName) {
// 获取PGM文件路径
String path = Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator + pgmFileName;
File pgmFile = new File(path);
try {
// 读取PGM文件
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(pgmFile.getAbsolutePath(), options);
// 创建PNG文件
File pngFile = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + File.separator + pngFileName);
// 将Bitmap对象转换为PNG文件
FileOutputStream out = new FileOutputStream(pngFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
} catch (Exception e) {
Log.e("PgmToPngConverter", e.getMessage());
}
}
}