十六进制颜色
编写一个程序,该程序读取一个像素值(定义RGB颜色值的24位数字),并根据第二个输入来更新像素值,该输入可以是:
单独的RGB通道值(以10为基数的整数)或另一个像素值。
像素中的每个RGB通道应独立于其他通道。如果更新导致一个通道上溢或下溢,则其他通道应不受此影响。新的像素值仍应为24位数字。
我编写的程序几乎是正确的,但是当更新导致一个通道上溢或下溢时,该程序将无法工作。
z_pixelv= input('Please provide a pixel value: ')
z_pixelv = int(z_pixelv,16)
channelv_or_pv = input('Please provide channel values or pixel value: ')
red = (z_pixelv & 0xFF0000)>>16
green = (z_pixelv & 0x00FF00)>>8
blue =(z_pixelv & 0x0000FF)>>0
if channelv_or_pv[1]=='x':
hexvalue = int(channelv_or_pv,16)
else:
k = [int(i) for i in channelv_or_pv.split()]
hexvalue=((k[0] << 16)+(k[1]<<8)+k[2]<<0)
j = z_pixelv + hexvalue
print('Your new pixel value is: {}'.format(hex(j)))
预期结果1(溢出):
Please provide a pixel value: 0xFFFFFF
Please provide channel values or pixel value: 10 10 10
Your new pixel value is: 0x090909
实际结果1(溢出):
Please provide a pixel value: 0xFFFFFF
Please provide channel values or pixel value: 10 10 10
Your new pixel value is: 0x10a0a09
预期结果2(下溢):
Please provide a pixel value: 0x505050
Please provide channel values or pixel value: -90 -80 -80
Your new pixel value is: 0xf60000
实际结果2(下溢):
Please provide a pixel value: 0x505050
Please provide channel values or pixel value: -90 -80 -80
Your new pixel value is: -0xa0000
实际/预期结果3(正确):
Please provide a pixel value: 0x505050
Please provide channel values or pixel value: 0x005000
Your new pixel value is: 0x50a050
实际/预期结果4(正确):
Please provide a pixel value: 0x505050
Please provide channel values or pixel value: 50 00 00
Your new pixel value is: 0x825050
答案 0 :(得分:1)
这应该可行。
pixel_value = input("Please provide a pixel value: ")
channel_or_pixel_value = input("Please provide channel values or pixel value: ")
pixel_value = pixel_value[2:]
value = int(pixel_value, 16)
red1 = (value & 0xFF0000) >> 16
green1 = (value & 0x00FF00) >> 8
blue1 = (value & 0x0000FF) >> 0
if channel_or_pixel_value[1] == 'x':
pixel_value = channel_or_pixel_value[2:]
pixel_value = int(pixel_value, 16)
pixel_red = (pixel_value & 0xFF0000) >> 16
pixel_green = (pixel_value & 0x00FF00) >> 8
pixel_blue = (pixel_value & 0x0000FF) >> 0
if channel_or_pixel_value[1] == 'x':
red2 = red1 + int(pixel_red)
green2 = green1 + int(pixel_green)
blue2 = blue1 + int(pixel_blue)
else:
channel_value = channel_or_pixel_value.split()
red2 = red1 + int(channel_value[0])
green2 = green1 + int(channel_value[1])
blue2 = blue1 + int(channel_value[2])
if red2 < 0:
red2 += 256
if green2 < 0:
green2 += 256
if blue2 < 0:
blue2 += 256
if red2 > 256:
red2 -= 256
if green2 > 256:
green2 -= 256
if blue2 > 256:
blue2 -= 256
print("Your new pixel value is: 0x{0:02x}{1:02x}{2:02x}".format(red2, green2, blue2))