我正在做一个练习,我必须将图像的大小调整为“ 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循环在浮点中将不起作用。
答案 0 :(得分:2)
我不认为您会被要求拆分单个像素。听起来好像在调整图像大小时要求您添加或删除像素。例如,假设您有一个12 x 12像素的图像,并且放大倍数为1.3。这样您就可以得到15.6 x 15.6的新图像大小,四舍五入为16 x16。
然后,您需要将原始图像中的像素映射到调整大小后的图像中的像素。一种简单的方法是获取较大图像的x和y坐标,然后将它们乘以比例因子(或除以比例因子)以获得较小图像中的相应坐标,然后将整个像素从旧像素复制到新图片。给定上述示例,较大图像中的像素(13,14)对应于x = 13 / 1.3 = 10且y = 14 / 1.3 =〜10.76(四舍五入为11),因此复制旧像素中的像素(10,11)图片移到新图片中的(13,14)。
答案 1 :(得分:1)
@dbush非常清楚。但是您还可以通过这两个观察结果来制定更深层的标度算法。
在@dbush示例中,他尝试将12 x 12扩展为16 x 16,因为不可能制作15.6 x 15.6(因为像素是离散单位)。但是通过这样做,比例因子不再是1.3,现在是16/12 = 1.333333333333333。因此,您可以使用该数字进行他说的调整。
在@dbush示例中,像素(13,14)(我假设是从0到15的像素)被映射到像素(10,10.76)。由于此像素不存在,因此他舍入了其坐标以改用(10,11)。但是(10,10.76)表示原始图像内一个小矩形的左上角的坐标。正常像素是一个大小为1 x 1的正方形。但是,这个小矩形的像素大小是1.3倍。这个小矩形的大小是1 / 1.3 = 0.78(大约)。这意味着这个小矩形的右下角为(10.78,11.54)。
这个必须映射到新图像的小矩形在像素(10,10)内的高度为11-10.76 = 0.24单位,在像素(10,11)内的高度为11.54-11 = 0.54单位。因此,新像素的RGB值必须是像素(10、10)和(10、11)的RGB值的加权总和,分别使用0.24和0.54作为权重。这将使您的代码具有按小于1的因子缩放图像的功能。
答案 2 :(得分:0)
像素代表屏幕上的该点,它是原子的。我需要调整屏幕的大小,然后创建算法,该算法将增加或减少行和列的数量,以至于具有像素部分。