拉伸C64调色板

2020-06-23 09:36:32

文摘:介绍了几种扩展有限的C64调色板以获得大的颜色梯度的方法。

Commodore C64的调色板非常有限,只有16种颜色,具有不同的亮度级别,如图1所示。请注意,我使用的是C64调色板的RGB表示,这是在一些计算机(包括C64)的仿真器WinInno中定义的。

调色板允许一些基本渐变。最初,这些渐变通常由来自相似色调范围的颜色组成-可能只基于名称,例如红色、浅红色、浅灰色。由于给定的颜色沿亮度轴扩散,因此只能构建很少的此类梯度。如图2所示,在小尺寸的光栅条中反映了这一收益。请注意,它们被放大以使其更明显。

后来,引入了使用完整亮度范围的多色调色板。通常,人们可以找到蓝色和红色的版本,后来出现了绿色/灰色/棕色的版本。图3分别显示了这些最常见的多色条。

在下面,还将使用图4中所示的一些更常见的组合。

这些梯度用于不同的目的。最明显的是“光栅”或“光栅条”--通过改变每条扫描线的背景和边框颜色而获得的直线。但是渐变也被用于多色徽标、淡出文本等。尽管如此,一些演示布局或想法需要填满屏幕的更大部分,而不是使用普通的圆条所能达到的效果。从栅格一开始就可以找到简单重复的“已知”栅格条,尽管人们应该指出它们相当乏味、老式(呃),而且在任何时候看起来都不是很好。(嗯)这是一种简单的重复,从栅格的一开始就可以发现它们是相当乏味的、老式的(呃),而且在任何时候看起来都不是很好。但是,通过使用不同的重复技术开发了一些虚拟拉伸梯度的方法,参见图5。

本文讨论这些模式,结构如下。首先,给出了圆钢拉伸的几种方法。在此基础上,提出了基于挤出的几种模式。最后,给出了一些不属于这些类的进一步的方法。

一种非常基本的方法是用黑色(或任何使用的背景颜色)细分纯圆条,如图6所示。

#BUILD";SIMPLE SPLIT";bardef BUILD_SIMPLE_SPLIT(渐变):RET=[]for c in Gradient:ret.append(C)ret.append(0)return ret+getReverted(ret[:-3])#BUILD A";Scaled Split";bardef build_scale_plit(渐变):RET=[]ret.append(渐变[0])ret.append(0)对于渐变中的c:对于范围(0,2)中的i:ret.append(C)ret.append(0)return ret+getReverted(ret[:-4])。

非常早并且经常重复的图案使用非常基本的抖动方法。“抖动”试图通过交替使用给定的颜色来克服缺乏颜色的问题。图8给出了基本版本,其中每种颜色的主要部分用两条线表示,并使用单线抖动。

图8:使用“穷人的抖动”获得的模式,抖动等级为2。

抖动的条形近似于圆形条形的外观。然而,很难找到与距离变化相似的每种颜色宽度的适当用法。相反,所有亮度都具有相同的宽度。虽然对于小的三色组合是可以接受的,但当使用更多的颜色时,它会破坏圆条的外观。当抖动比例放大时,情况更是如此。图9显示了标度为3和4的抖动。

图9:使用“穷人的抖动”获得的模式,抖动尺度为3(上)和4(下)。

#构建一个";dithered";bardef build_dithering(渐变,步骤=2):ret=[]#保留最后一个用于抖动的lastColor=0#在渐变中的i的渐变(颜色)上循环:#每种颜色在范围内都有-1个抖动步骤(0,step-1):#为范围内的k构建一段尺寸线(0,step):#";dither";如果k<;j+1:ret.append(I)否则:ret.append(LastColor)#现在是范围内j的实线段(0,步骤):ret.append(I)#移动到下一个颜色lastColor=i返回ret+getReverted(Ret)。

获得大图案的一些机制不是简单地拉伸条形,而是基于挤压简单的条形。它们如下所示。

在这种方法中,原始条在两侧重复复制,但每次重复时都会删除各自最亮的颜色。通常,在获得的条之间使用一条黑线作为分隔符。这些完全挤出的条如图10所示。

此方法不近似于单个圆棒的外观。取而代之的是,人们可以将其解释为沿着圆圈或条形分配的条形随着距离的增加而褪色。但同样,没有尝试进行正确的缩放。

#构建一个完全拉伸的";bardef build_EXPRUDED_FULL(渐变,singleCentral=True):RET=[]ret.app.append(渐变[0])ret.append(0)#step==len(渐变)对于范围(0,len(渐变)):#根据范围(0,i+1)中j的渐变开始复制:ret.append(渐变[j])#再次复制,但是对于范围(0,i+1):ret.append(渐变[i-j])#添加分隔线ret.append(0)ret=ret[:-1-len(渐变)]#!return ret+getReverted(Ret)。

同样,原始条形构成了此图案的中心。它在两侧再次重复,但与完全挤压相反,只重复条形的一半,再次在每次重复时移除各自最亮的颜色。与以前一样,重复部分由一条额外的黑线分隔。它们如图11所示。

由于尺寸的减小,产生了深度效应。该图案看起来像是单条将堆叠在中心条的后面,从而引入了深度。

#构建一个";半挤出";bardef build_Extruded_Half(渐变,singleCentral=True):RET=[]#step==len(渐变)for i in range(0,len(渐变)):#根据范围内j的渐变开始复制(0,i+1):ret.append(渐变[j])#添加分隔线ret.append(0)#删除添加的最后一条黑线ret=ret[:-1]return ret+getRef。

“颠簸”模式出现的时间相对较晚。我想他们的发明者想要一个大尺寸的“圆”棒,但是克服了“穷人抖动”的可扩展性差的问题。“凹凸不平”的条形图如图12所示。

尽管试图获得圆棒,但此尝试仍不能正确复制形状。

#BUMP";BUPPED";bardef build_Bumping(GRADER):RET=[]rret=[]for i in range(0,len(GRADER)-1):tmp=[]if i==0:tmp.append(GRADER[0])elif i==1:tmp.append(GRIDATER[1])tmp.append(GRIDATION[0])elif i<;Len(渐变)-1:tmp.append(渐变[i+1])范围(0,i-1)中的j:tmp.append(渐变[i])tmp.append(渐变[i-1])tmp.append(0)范围内i的tmp.append(0,len(Tmp)):ret.append(tmp[i])rret.insert(0,tmp[len(Tmp)-1-i])tmp=[]tmp.app。LEN(渐变)):tmp.append(渐变[-1])tmp.append(0)返回ret+tmp+rret

所呈现的图案被用来使用有限数量的颜色来获得大梯度。尽管它们中的大多数试图复制不同形状或物体的外观-主要是圆条-但通过赋予它们正确的宽度,这些图案并不类似于颜色亮度级别的变化。

好的,但是为什么呢?这样的图案除了本身是一种想要呈现的吸引人的东西外,几乎可以在任何需要有限调色板的媒体中重复使用。人们可能会想到建筑物表面的颜色,3D界面的颜色,或者颜色有限的标志设计。

目前提出的算法并没有投入太多的精力。它们肯定可以改进,以满足一些进一步的需求或任何美学问题。但您可能会注意到,最初,这些模式都是手工破解的。