在java中将二维二进制矩阵转换为黑白图像

2023-11-27

我是java新手。我现在有只有 1 和 0 的 2D 二进制矩阵。我想将其保存为具有相同宽度和高度的jpg图像(黑白)。我怎么能意识到这一点呢?我尝试了下面的代码但失败了,说“java.lang.IllegalArgumentException:image == null!”请帮助我或给我更好的解决方案。非常感谢。

public static void main(String[] args) throws IOException {

    //result is double[25][33] binary matrix with only 1s and 0s;
    int height=result.length;
    int width=result[0].length;;
    byte[] data = new byte[height*width];
    int k=0;
    for(int i = 0;i < height;i++){
        for(int j = 0; j < width; j++){
            data[k]=(byte)result[i][j];
            k++;
        }
        System.out.print("\n");
    }
    InputStream input = new ByteArrayInputStream(data);
    BufferedImage output = ImageIO.read(input);
    ImageIO.write(ouput, "jpg", new File("c:/result.jpg"));

}

这是一个创建 30x30 方格框的简单示例:

enter image description here

public static void main(String... args) throws IOException {
    int w = 30, h = 30;

    // create the binary mapping
    byte BLACK = (byte)0, WHITE = (byte)255;
    byte[] map = {BLACK, WHITE};
    IndexColorModel icm = new IndexColorModel(1, map.length, map, map, map);

    // create checkered data
    int[] data = new int[w*h];
    for(int i=0; i<w; i++)
        for(int j=0; j<h; j++)
            data[i*h + j] = i%4<2 && j%4<2 || i%4>=2 && j%4>=2 ? BLACK:WHITE;

    // create image from color model and data
    WritableRaster raster = icm.createCompatibleWritableRaster(w, h);
    raster.setPixels(0, 0, w, h, data);
    BufferedImage bi = new BufferedImage(icm, raster, false, null);

    // output to a file
    ImageIO.write(bi, "jpg", new File("C:\\Users\\user\\Desktop\\test.jpg"));
}

EDIT:

对于您正在做的事情,您实际上不需要创建自己的 ImageColorModel,您可以使用内置类型:BufferedImage.TYPE_BYTE_GRAY 或 TYPE_BYTE_BINARY。这是一个更好的示例,展示了如何使用灰度来获得方格框:

enter image description here

public static void main(String... args) throws IOException {
    int w = 40, h = 40, divs = 5;

    BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_GRAY);
    WritableRaster raster = bi.getRaster();

    for(int i=0; i<w; i++)
        for(int j=0; j<h; j++)
            raster.setSample(i,j,0,128+(int)(127*Math.sin(Math.PI*i/w*divs)*Math.sin(Math.PI*j/h*divs)));

    ImageIO.write(bi, "jpg", new File("C:\\Users\\user\\Desktop\\test.jpg"));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在java中将二维二进制矩阵转换为黑白图像 的相关文章

随机推荐

  • Material UI 的工具提示 - 自定义样式[重复]

    这个问题在这里已经有答案了 如何更改 Material UI 工具提示的背景颜色和颜色 我尝试如下 但它不起作用 import createMuiTheme from material ui core styles export const
  • 返回值的复制构造函数何时发生

    我有以下成员函数 Person ClassB DoSomethingAndReturnPerson RAIIMutex myLock m mutex return m person RAIIMutex是一个辅助类 它接收互斥体并将其锁定在构
  • (CSS?)消除浏览器在超链接图像周围的“选定”线?

    所附屏幕截图来自 OS X Firefox 3 请注意 中心选项卡 图像 周围有一条虚线 显然是因为它是最近选择的选项卡 有没有办法可以消除 CSS 或 JavaScript 中的这条虚线 嗯 免费图像托管服务减小了图像的大小 但是如果您能
  • ListView 子项中的图像

    如何为列表视图子项添加图像而不是文本 喜欢http i44 tinypic com 2mzz6s6 png 通常我添加字符串的方式如下 ListViewItem item new ListViewItem A item SubItems A
  • 插入符训练方法抱怨有问题;所有 RMSE 指标值均缺失

    在很多情况下 我在尝试安装时都会遇到此错误gbm or rpart模型 最后 我能够使用公开数据一致地重现它 我注意到使用 CV 或重复的 cv 时会发生此错误 当我不使用任何适合控件时 我不会收到此错误 有人可以解释一下为什么我总是犯错误
  • 如何使用 symPy 和 numPy 用符号替换矩阵

    我试图用方程中的两个符号代替它们各自的矩阵形式 我创建了一个换向器函数 它形成了我的表达式 t vS sy symbols t vS commutative False hS t vS eta myComm t hS dHs myComm
  • 转换为 ScheduledThreadPoolExecutor

    我还是Java的初学者 所以我对线程和并发还没有了解太多 但是 我希望能够使用 ScheduledThreadPoolExecutor 作为计时器 因为我在使用 java util Timer 和 TimerTask 时遇到问题 我对线程的
  • Eclipse 拼写引擎不存在

    我在 Windows 上使用 Eclipse 3 4 Ganymede 和 CDT 5 当集成的拼写检查器不知道某些单词时 它会建议 除其他外 将该单词添加到用户词典中的选项 如果用户词典尚不存在 拼写检查器会提供帮助配置它并显示 常规 编
  • Android导航抽屉(调用活动)与抽象MainActivity

    我想要一个 AbstractMainActivity 来创建导航抽屉 在那里我还应该处理菜单项的点击 然后调用新的活动 在这些活动中 我想再次使用相同的导航抽屉 我将使用 AbstractMainActivity 扩展子类 并以与每个子类不
  • 使用 CSS 创建光泽灯光效果

    I m trying to create a light effect with CSS and HTML only Just like this image 我不知道是否可能 或者如何做 任何帮助将不胜感激 circle border 1
  • OOP 设计:如何将数据库处理合并到应用程序对象中

    这是我经常遇到的一个设计问题 我想找到一些关于这个主题的一般见解 此处提供的代码只是一个示例 在设计阶段很容易决定您需要一个对象 User Unique ID Login name Password Full name 并且很容易将其转换为
  • 在WebKit中,如何获取资源的内容?

    我一直在编写一个 Mac 应用程序来检查每个 HTTP 请求 因此我使用 WebView 来加载请求 问题是我似乎无法弄清楚如何获取每个资源项的内容 我正在尝试通过以下方式获取资源的内容WebResourceLoadDelegate met
  • System.loadLibrary() 错误

    我成功地使用 android ndk Standalone 工具链交叉编译了一个 C 库 然后 我在 Eclipse 中创建了一个新的 Android 应用程序项目 当我将 mylib so 放入 jni 文件夹并执行 ndk build
  • 如何在 Docker 中将卷从容器挂载到主机?

    我有一个关于 Docker 中整个数据卷过程的问题 基本上这里有两个 Dockerfile 及其各自的运行命令 Dockerfile 1 Transmission over Debian Version 2 92 FROM debian t
  • R:从 GLMNet 获取 AIC/BIC/Likelihood

    我想知道是否可以从 GLMNet 获取 AIC 和 BIC 我发现 glmnet cr 似乎能够做到这一点 但我的回应是时间 而不是序数 我可以根据可能性自己计算它 但 glmnet 也不会返回 Tangential 我真的可以返回 l1n
  • 使用撰写文本进行链接

    我找不到如何链接我的Text 使用 Jetpack Compose 在撰写之前我要做的就是 Linkify addLinks myTextView Linkify EMAIL ADDRESSES or Linkify WEB URLS 显然
  • Flask-SQLAlchemy 中连接后的过滤

    我有两张桌子 location and country 正在尝试查询 在我的烧瓶应用程序中由以下模型表示 from sqlalchemy import Column DateTime ForeignKey Integer Numeric S
  • 将 URL 中的 HTTP 参数与 Android Intent Filter 相匹配

    我正在尝试组合一个意图过滤器 以便在浏览器中访问某个 HTML URL 时启动我的应用程序 当它是标准网址 例如 www stonyx com 时 我这样做没有任何问题 但是 我需要将 URL 与 HTTP 参数 如 www stonyx
  • 使用 Visual studio 2013 Professional 的 Windows Phone 8 应用程序 [重复]

    这个问题在这里已经有答案了 在将 Visual studio 2010 升级到 2012 2013 的混乱中 2013 年是创建 Windows 商店应用程序的唯一选择 但没有给出对 Windows Phone 应用程序开发的支持的清晰图片
  • 在java中将二维二进制矩阵转换为黑白图像

    我是java新手 我现在有只有 1 和 0 的 2D 二进制矩阵 我想将其保存为具有相同宽度和高度的jpg图像 黑白 我怎么能意识到这一点呢 我尝试了下面的代码但失败了 说 java lang IllegalArgumentExceptio