字节数组到 8 位真彩色图像

2024-01-04

我正在尝试从旧电脑游戏中提取一些精灵。我找到了精灵并将它们撕成灰度的单独文件。现在我正在尝试研究如何给它们上色。可执行文件或其数据文件中似乎没有任何调色板数据 - 再加上游戏所需的颜色深度(256 色)使我相信每个字节实际上是一个 8 位真彩色值。

假设我有一个(在本例中缩短的)数组,如下所示:

12 11 12 11
0A 13 12 11
13 12 11 0A
12 11 13 13

一些示例代码类似于我用来编写图像的代码,如下所示:

DataInputStream dis = new DataInputStream(new FileInputStream("GAME.EXE"));

dis.skipBytes(bytesToImage);

BufferedImage bufferedImage = new BufferedImage(columns, rows, BufferedImage.TYPE_BYTE_INDEXED);

for (int i = 0; i < rows; i++) {
    for (int j = 0; j < columns; j++) {
        byte pixel = dis.readByte();

        System.out.print(toHexString(pixel));

        //For now, greyscale everything.
        int value = pixel << 16 | pixel << 8 | pixel;

        bufferedImage.setRGB(j, i, value);
    }

    System.out.print(System.getProperty("line.separator"));
}

ImageIO.write(bufferedImage, "PNG", new File("test.png"));

我已经搞乱了传递给构造函数的 imageType 和手动传递的 ColorModel,但似乎都没有做任何有用的事情。对像素进行二进制 AND 和一些位移大多只是将图像设置为深红色。

在这种情况下,我该如何将每个像素设置为正确的真彩色值?


8 位真彩色意味着第 7 至 5 位包含红色,第 4 至 2 位包含绿色,第 1 和 0 位包含蓝色。 (IE。RRRGGGBB)您需要将它们移至 24 位真彩色模型中的高位。

对 RGB 颜色使用 24 位颜色模型,例如 TYPE_INT_RGB 或 TYPE_INT_ARGB,并从 8 位值导出 24 位像素值:

int pixel24 = 
    ((pixel & (128+64+32)) << (16+5-5)) |
    ((pixel & (16+8+4))    << (8+5-2))  |
    ((pixel & (2+1))       << 6);

换句话说:

int pixel24 = 
    ((pixel & 224) << 16) | ((pixel & 28) << 11) | ((pixel & 3) << 6);

Or

int pixel24 = 
    ((pixel & 0xE0) << 16) | ((pixel & 0x1C) << 11) | ((pixel & 0x03) << 6);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字节数组到 8 位真彩色图像 的相关文章

  • org.apache.sling.api.resource,version=[2.3,3) -- 无法解析

    您好 我无法访问我的项目内容 我已经上传了从 CQ 访问内容所需的所有包 我唯一能看到的是 org apache sling api resource version 2 3 3 无法解析 这是否是异常的原因 如果是 请告诉我如何解决 中Q
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 我需要什么库才能在 Java 中访问这个 com.sun.image.codec.jpeg?

    我正在用java创建一个图像水印程序 并导入了以下内容 import com sun image codec jpeg JPEGCodec import com sun image codec jpeg JPEGEncodeParam im
  • Hibernate.createBlob() 方法从 Hibernate 4.0.1 开始已弃用,并移至 Hibernate.getLobCreator(Session session).createBlob()

    Method Hibernate createBlob 已弃用自休眠4 0 1并搬到Hibernate getLobCreator Session session createBlob 任何解决方案我应该在方法内传递什么getLobCrea
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • 具有 java XSLT 扩展的数组

    我正在尝试使用 java 在 XSLT 扩展中使用数组 我收到以下错误 Caused by java lang ClassCastException org apache xpath objects XObject cannot be ca
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • 编辑文件名在 JComboBox 中的显示方式,同时保持对文件的访问

    我对 Java 很陌生 对堆栈溢出也很陌生 我正在尝试利用 JMF API 创建一个用 Java 编码的简单媒体播放器 到目前为止 我已经能够设置一个简单的队列 播放列表来使用JComboBox called playListHolder
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • 使用 CSS 的响应式图像

    我发现调整图像大小以使其具有响应能力很棘手 我正在开发一个 php 应用程序来自动将网站转换为响应式版本 我有点被图像困住了 我已经成功地为网站上的每个图像添加了一个包装类 并且可以很好地调整图像的大小 我的问题在于自然小于窗口的图像 例如
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • ServletContainer 类未找到异常

    我无法再编译我的球衣项目 并且出现以下异常 GRAVE Servlet Project API threw load exception java lang ClassNotFoundException com sun jersey spi
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个

随机推荐

  • 使用 PHP 进行简单的分页

    我想用PHP实现分页 我有一些来自数据库的结果集 让它成为一个数组 我需要一个每页显示 4 条记录的分页 页码应如下 gt 当您选择第 2 页时 格式应为以下 gt 你们能给我推荐一些分页概念来实现这个吗 您实际上可以使用LIMITSQL
  • C#:调试器中的 comctl32.dll 版本 6

    我正在使用WindowsAPI代码包 http code msdn microsoft com WindowsAPICodePack对于任务对话框 当我尝试显示该对话框时 它说需要加载 comctl32 dll 的版本 6 所以我将版本 6
  • 无法推导具有嵌套类型的模板函数

    我正在使用 SystemC 库 它要求所有用户定义的类型都具有运算符 template
  • Eclipse - C++ hello world 项目的错误

    我使用的是 64 位 Windows 7 我已经下载了CDT Eclipse并已下载MinGW 之后 我创建了一个c hello world项目 这是代码 include
  • 亚马逊认知:未找到身份

    我正在开发经过开发人员身份验证的项目 我正在尝试使用下面的代码获取凭据 但它给了我以下错误 我已将 IdentityId 和 Token 从服务器代码手动粘贴到此代码中 Caused by com amazonaws services co
  • 点划线和虚线的绘图问题:如何修改默认线型以便更好地与矢量渲染器“画家”一起使用?

    Matlab 提供以下默认值线条样式 http www mathworks com help matlab ref linespec html Solid line default Dashed line Dotted line Dash
  • 阻止 PWA 在桌面上安装 chrome 76 提示?

    如果满足 PWA 标准 Chrome 76 在多功能框中引入了一个 安装应用程序 按钮 有没有办法阻止此按钮出现在 chrome 桌面的多功能框中 假设您想阻止默认设置以显示自定义安装横幅 在这里读 https love2dev com b
  • 如何使用通配符实例化泛型?

    让我们研究一些使用通配符的通用实例化情况 1 这段代码 List 生成以下错误 required class or interface without bounds found 2 但是这个 List gt 编译成功 3 和这个 List
  • java反编译

    当使用java反编译器 http java decompiler free fr 反编译特定的jar时 我得到了一些奇怪的代码 我无法识别是什么 有人能帮我吗 代码是这样的 Foo access 004 Foo this or this B
  • 动画 Android 环形的扫角

    尝试对 Android 环形进行动画处理 以产生与显示的图像序列类似的效果 我找到了可绘制形状的戒指
  • 我们是否必须在控制器中发布具有与 pojo 对象完全相同的字段的 json 对象?

    我是 Spring Rest 新手 在将 JSON 对象从 jquery 映射到控制器时遇到问题 我的 jquery JSON 对象缺少一些字段 这些字段存在于控制器上的 java 对象中 我是否必须创建新类来映射此类对象 或者有什么方法可
  • 带有 void 输入的 Lambda 表达式

    好吧 非常愚蠢的问题 x gt x 2 是一个 lambda 代表与委托相同的东西 int Foo x return x 2 但是 lambda 等价于什么 int Bar return 2 多谢 零 lambda 等价物是 gt 2
  • 将 Python 脚本移动到另一台计算机

    我想知道如果我编写一个使用计算机上已安装的库 例如 lxml 的 Python 脚本 并且我想将此脚本部署到另一台计算机上 我的选择是什么 当然 在另一台机器上安装 Python 是可以的 但是我是否还必须安装我在脚本中使用的所有库 或者我
  • 如何在两个值之间切换?

    我想在Python中的两个值之间切换 即0和1之间 例如 当我第一次运行某个函数时 它会生成数字 0 下一次 它会生成 1 第三次它会返回到零 依此类推 抱歉 如果这没有意义 但是有人知道如何做到这一点吗 Use itertools cyc
  • 警告:返回类型默认为“int”[-Wreturn-type]

    我是一名开始学习 C 的 Linux 用户 我正在尝试编译我输入的这个源代码 include
  • 覆盖 Liferay 启动事件

    我有一个关于 Liferay 启动事件的问题 Liferay 文档中给出 启动活动 输入扩展的逗号分隔类名列表com liferay portal struts SimpleAction 这些类将在指定事件中运行 有人可以告诉我两者之间有什
  • 数组越界,参数问题

    所以当我编译时 一切都会编译得很好 当我去运行该程序时 我收到此错误 线程 main 中的异常 java lang ArrayIndexOutOfBoundsException 0 在 ClientForNoDupCollection ma
  • 如何使用动态列取消透视 Oracle

    我需要取消透视一个我无法控制列的表 所以我需要动态获取列名称 这就是我所拥有的 CREATE TABLE test PK VARCHAR2 255 CHAR COL1 VARCHAR2 255 CHAR COL2 VARCHAR2 255
  • 使用迁移 API 时 Knex 迁移不起作用

    我是 knex 迁移的新手 在过去的 2 天里我一直在努力让它工作 但没有任何反应 我正在尝试使用以下命令以编程方式运行我的迁移knex migration object 首先使用 cli 我在迁移目录中创建一个迁移文件 这是它的内容 ex
  • 字节数组到 8 位真彩色图像

    我正在尝试从旧电脑游戏中提取一些精灵 我找到了精灵并将它们撕成灰度的单独文件 现在我正在尝试研究如何给它们上色 可执行文件或其数据文件中似乎没有任何调色板数据 再加上游戏所需的颜色深度 256 色 使我相信每个字节实际上是一个 8 位真彩色