编写一个以像素值(定义RGB颜色值的24位编号)读取的程序,并根据第二个输入更新像素值



十六进制颜色

编写一个以像素值(定义RGB颜色值的24位数字(读取的程序,并根据第二个输入更新像素值,该值将是:

单独的RGB通道值(基本10个整数(或另一个像素值。

像素中的每个RGB通道应独立于其他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

这应该是有效的。

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))

相关内容

最新更新