⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 109.txt

📁 VB文章集(含API、窗口、数据库、多媒体、系统、文件、等等)
💻 TXT
字号:
位图文件内部初探
 
最 常 用 的 几 种 图 象 文 件 格 式 怎 样 存 储 图 象 自 从 我 在 十 四 年 前 买 回 第 一 台 pc 以 后, 我 就 一 直 对 计 算 机 用 1 和 0 组 成 的 数 据 流 来 存 储 那 些 复 杂 的 信 息 很 感 兴 趣。 最 初 引 起 我 注 意 的 是 当 时 曾 很 流 行 的 印 在 杂 志 上 的 basic 程 序 清 单, 它 们 带 有 很 多 数 据 段, 你 可 将 它 们 键 入 并 运 行, 以 建 立 其 他 的 程 序。 从 这 里 我 明 白 了 任 何 程 序 无 论 它 多 么 复 杂, 也 只 不 过 是 一 系 列 的 针 对 计 算 机 微 处 理 器 的 指 令 而 已。 接 着, 我 对 ascii 码 有 了 兴 趣, 然 后 是 字 处 理 文 件 格 式, 再 后 来 吗, 您 就 看 到 了 图 象。 

    直 至 今 天 仍 让 我 着 迷 的 一 种 技 术 是 位 图 文 件 存 储。 一 个 位 图 存 储 了 计 算 机 上 能 够 再 现 一 幅 图 象 所 需 的 信 息。 我 们 经 常 在 显 示 器 上 看 到 图 象, 例 如 一 幅 美 丽 的 日 落, 然 而 在 计 算 机 眼 里 它 只 是 一 堆 0 和 1 的 组 合。 归 根 结 底, 也 就 是 位 图 文 件 里 的 这 些 位 和 字 节 来 告 诉 计 算 机 这 幅 图 象 中 每 个 象 素 该 是 什 么 颜 色, 然 后 计 算 机 把 位 图 中 的 颜 色 转 化 成 与 它 的 显 示 卡 兼 容 的 格 式, 最 后 输 出 到 显 示 器 上。 

    这 个 过 程 中 有 趣 的 是 计 算 机 怎 样 解 释 位 图 中 的 数 据, 位 图 文 件 有 多 种 格 式, 每 种 格 式 都 有 自 己 的 方 法 对 象 素 数 据 编 码 并 给 出 此 种 格 式 所 要 求 的 一 些 其 他 信 息, 之 所 以 windows 95 能 够 读 取 .bmp 文 件 而 不 能 读 .gif 文 件, 就 是 因 为 他 的 设 计 人 员 使 paint 程 序 能 够 对 以 .bmp 格 式 存 储 的 图 象 数 据 进 行 解 码, 而 不 是 .gif。 

    到 这 里。 您 一 定 很 想 知 道 一 个 位 图 文 件 里 究 竟 是 什 么, 一 种 格 式 同 另 一 种 又 有 什 么 不 同 ? 那 么 就 让 我 们 来 简 单 地 看 看 在 pc 机 上 常 用 的 六 种 位 图 文 件 格 式。 当 然 还 有 其 他 的 文 件 格 式, 例 如 对 于 矢 量 图 形, 就 是 存 储 一 些 再 现 图 象 的 指 令 而 不 是 每 个 象 素 的 颜 色 数 据, 但 是 在 这 里 讨 论 的 这 六 种 位 图 文 件 格 式 才 是 您 平 时 工 作 最 可 能 使 用 的。 

  bmp 文 件 

    bmp(bitmap 的 缩 写) 文 件 格 式 是 windows 本 身 的 位 图 文 件 格 式, 所 谓 本 身 是 指 windows 内 部 存 储 位 图 即 采 用 这 种 格 式。 一 个 .bmp 格 式 的 文 件 通 常 有 .bmp 的 扩 展 名, 但 有 一 些 是 以 .rle 为 扩 展 名 的, rle 的 意 思 是 行 程 长 度 编 码(run length encoding)。 这 样 的 文 件 意 味 着 其 使 用 的 数 据 压 缩 方 法 是 .bmp 格 式 文 件 支 持 的 两 种 rle 方 法 中 的 一 种。 

    bmp 文 件 可 用 每 象 素 1、 4、 8、 16 或 24 位 来 编 码 颜 色 信 息, 这 个 位 数 称 作 图 象 的 颜 色 深 度, 它 决 定 了 图 象 所 含 的 最 大 颜 色 数。 一 幅 1-bpp(位 每 象 素, bit per pixel) 的 图 象 只 能 有 两 种 颜 色。 而 一 幅 24-bpp 的 图 象 可 以 有 超 过 16 兆 种 不 同 的 颜 色。 

    下 一 页 的 图 说 明 了 一 个 典 型 .bmp 文 件 的 结 构。 它 是 以 256 色 也 就 是 8-bpp 为 例 的, 文 件 被 分 成 四 个 主 要 的 部 分: 一 个 位 图 文 件 头, 一 个 位 图 信 息 头, 一 个 色 表 和 位 图 数 据 本 身。 位 图 文 件 头 包 含 关 于 这 个 文 件 的 信 息。 如 从 哪 里 开 始 是 位 图 数 据 的 定 位 信 息, 位 图 信 息 头 含 有 关 于 这 幅 图 象 的 信 息, 例 如 以 象 素 为 单 位 的 宽 度 和 高 度。 色 表 中 有 图 象 颜 色 的 rgb 值。 对 显 示 卡 来 说, 如 果 它 不 能 一 次 显 示 超 过 256 种 颜 色, 读 取 和 显 示 .bmp 文 件 的 程 序 能 够 把 这 些 rgb 值 转 换 到 显 示 卡 的 调 色 板 来 产 生 准 确 的 颜 色。 

    bmp 文 件 的 位 图 数 据 格 式 依 赖 于 编 码 每 个 象 素 颜 色 所 用 的 位 数。 对 于 一 个 256 色 的 图 象 来 说, 每 个 象 素 占 用 文 件 中 位 图 数 据 部 分 的 一 个 字 节。 象 素 的 值 不 是 rgb 颜 色 值, 而 是 文 件 中 色 表 的 一 个 索 引。 所 以 在 色 表 中 如 果 第 一 个 r/g/b 值 是 255/0/0, 那 么 象 素 值 为 0 表 示 它 是 鲜 红 色, 象 素 值 按 从 左 到 右 的 顺 序 存 储, 通 常 从 最 后 一 行 开 始。 所 以 在 一 个 256 色 的 文 件 中, 位 图 数 据 中 第 一 个 字 节 就 是 图 象 左 下 角 的 象 素 的 颜 色 索 引, 第 二 个 就 是 它 右 边 的 那 个 象 素 的 颜 色 索 引。 如 果 位 图 数 据 中 每 行 的 字 节 数 是 奇 数, 就 要 在 每 行 都 加 一 个 附 加 的 字 节 来 调 整 位 图 数 据 边 界 为 16 位 的 整 数 倍。 

    并 不 是 所 有 的 bmp 文 件 结 构 都 象 表 中 所 列 的 那 样, 例 如 16 和 24-bpp, 文 件 就 没 有 色 表, 象 素 值 直 接 表 示 rgb 值, 另 外 文 件 私 有 部 分 的 内 部 存 储 格 式 也 是 可 以 变 化 的。 例 如, 在 16 和 256 色 .bmp 文 件 中 的 位 图 数 据 采 用 rle 算 法 来 压 缩, 这 种 算 法 用 颜 色 加 象 素 个 数 来 取 代 一 串 颜 色 相 同 的 序 列, 而 且, windows 还 支 持 os/2 下 的 .bmp 文 件, 尽 管 它 使 用 了 不 同 的 位 图 信 息 头 和 色 表 格 式。 

    pcx 文 件 

    .pcx 是 在 pc 上 成 为 位 图 文 件 存 储 标 准 的 第 一 种 图 象 文 件 格 式。 它 最 早 出 现 在 zsoft 公 司 的 paintbrush 软 件 包 中, 在 80 年 代 早 期 授 权 给 微 软 与 其 产 品 捆 绑 发 行, 而 后 转 变 为 microsoft paintbrush, 并 成 为 windows 的 一 部 分。 虽 然 使 用 这 种 格 式 的 人 在 减 少, 但 这 种 带 有 .pcx 扩 展 名 的 文 件 在 今 天 仍 是 十 分 常 见 的。 

    pcx 文 件 分 为 三 部 分, 依 次 为: pcx 文 件 头, 位 图 数 据 和 一 个 可 选 的 色 表。 文 件 头 长 达 128 个 字 节, 分 为 几 个 域, 包 括 图 象 的 尺 寸 和 每 个 象 素 颜 色 的 编 码 位 数。 位 图 数 据 用 一 种 简 单 的 rle 算 法 压 缩, 最 后 的 可 选 色

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -