【发布时间】:2018-12-27 15:49:19
【问题描述】:
我正在做一个练习,我必须将图像大小调整“f”次。 "f" 是一个浮点数,所以我必须考虑 1.45、3.54 等等。我不想让你解决问题,但我对此有些怀疑。
一个像素在 BMP 文件中是 24 位的,对吧?因为是RGB,所以红色1个字节,绿色1个字节,蓝色1个字节。那么我应该如何划分一个像素呢?例如,如果我有 2.67,那么 0.67 将如何工作?分割一个像素就是分割一个3个字节,但是分割是有限度的,而且RGB会消失,因为如果我除以一半,那么我只有12位,不足以存储RGB。
此外,当我逐像素复制时,是否可以每次复制 0.01 像素而不是逐像素复制?这意味着如果我需要 1 步来复制 1 个像素(一次 1 个像素),那么如果我每次复制 0.01 个像素,则意味着我将花费我复制整个像素所需时间的 100 倍。这对我来说听起来很奇怪,因为一次复制 0.01 个像素意味着一次复制 0.01 个字节,如果我调整大小(我认为),这可能会搞砸图像。
我尝试过使用整数,但例如,for 循环在浮点数中不起作用,因为所有可能性。
【问题讨论】:
-
图像的重新缩放是通过计算像素的新值来完成的。例如,假设您将一条线(而不是二维图像)缩放 2 倍,并且 4 处的像素为 100% 红色,而 5 处的像素为 100% 绿色。新图像当然会在 8 处有 100% 的红色像素,在 10 处有 100% 的绿色像素,但在 9 处会发生什么?您可以在其中放置一个 50% 红色和 50% 绿色的像素。但随之而来的是并发症。如果按 1.5 缩放,4 处的红色像素变为 6 处的红色像素,但 5 处的绿色像素变为 7.5。所以必须将 7 和 8 处的像素设置为…
-
... 部分来自这个 100% 的绿色像素。但是,如果您计算附近像素的平均值,则结果像素不会是 100% 的绿色。原始图像的一些亮度会丢失。另一个复杂因素是二维图像导致目标位于由四个像素定义的正方形内,因此必须在二维中进行插值。有多种方法可供选择,没有一个正确的答案。如果您正在做一个练习,应该有更多关于这个练习的预期指导。
-
理论上一个像素是不能被分解的。但是,有些技术(例如亚像素渲染)利用用户显示布局的低级知识来独立点亮红色/绿色/蓝色元素,以便比理论上更好地控制文本的轮廓。
-
哦,我们很清楚,我不相信有人会要求您只使用一些 RGB 位并丢弃其他位。我几乎可以肯定这不是正确的答案
标签: c floating-point resize pixel bmp