트루 컬러 코드


12

Wikipedia의 트루 컬러 (24 비트) 는 관련 부분으로 설명됩니다.

24 비트는 거의 항상 R, G, B 각각의 8 비트를 사용합니다. 2018 년 현재 24 비트 색 심도는 거의 모든 컴퓨터 및 전화 디스플레이와 대부분의 이미지 저장 형식에서 사용됩니다. 픽셀 당 32 비트가있는 거의 모든 경우는 24 개가 컬러로 사용되고 나머지 8 개는 알파 채널이거나 사용되지 않음을 의미합니다.

2 24 는 16,777,216 개의 다양한 색상을 제공합니다. 사람의 눈은 최대 천만 색상을 식별 할 수 있으며 [10] 디스플레이의 색 영역이 사람의 시력 범위보다 작기 때문에 인식 할 수있는 것보다 더 자세하게 해당 범위를 포함해야합니다. ...

...

Macintosh 시스템은 24 비트 색상을 "수백만 색상"이라고합니다. "트루 컬러"라는 용어는이 기사에서 "직접 컬러"라고 부르는 것을 의미하는 데 사용됩니다. [13] 또한 24보다 크거나 같은 모든 색 농도를 나타내는 데 자주 사용됩니다.

모든 16,777,216 색을 포함하는 이미지

모든 16,777,216 색

직무

CSS rgb()함수 에서 배열 내의 모든 16,777,216 색 변형을 문자열로 생성하고 반환하는 프로그램을 작성하십시오.

5.1. RGB 기능 : rgb()rgba()

rgb()기능은 빨강, 녹색 및 파랑 채널을 직접 지정하여 RGB 색상을 정의합니다. 구문은 다음과 같습니다.

rgb() = rgb( <percentage>{3} [ / <alpha-value> ]? ) |
        rgb( <number>{3} [ / <alpha-value> ]? )
<alpha-value> = <number> | <percentage>

처음 세 개의 인수는 각각 색상의 빨강, 녹색 및 파랑 채널을 지정합니다. 0%sRGB 영역에서 해당 색상 채널의 최소값을 100%나타내고 최대 값을 나타냅니다. A <number>는와 동일 <percentage>하지만 다른 범위를 0갖습니다 . 다시 컬러 채널의 최소값을 나타내지 만255최대 값을 나타냅니다. 이러한 값은 많은 그래픽 엔진이 내부적으로 색상 채널을 단일 바이트로 저장하여 0에서 255 사이의 정수를 보유 할 수 있다는 사실에서 비롯됩니다. 구현시 가능한 한 제작 또는 계산 된대로 채널의 정밀도를 존중해야합니다. 이것이 가능하지 않은 경우, 채널은 사용 된 최고 정밀도로 가장 가까운 값으로 반올림되어야하며 두 값이 동일하게 가까운 경우 반올림해야합니다.

마지막 인수 <alpha-value>인은 색상의 알파를 지정합니다. 로 지정된 경우 <number>, 값의 유용한 범위는 0 (완전히 투명한 색을 1나타냄 ) ~ (완전히 불투명 한 색을 나타냄)입니다. 로 지정 0%하면 완전히 투명한 색상을 100%나타내는 반면 완전히 불투명 한 색상 을 나타냅니다. 생략하면 기본값은 100%입니다.

이 범위 밖의 값은 유효하지 않지만 계산 된 값 시간에 여기에 정의 된 범위로 고정됩니다.

레거시 이유로 인해 rgb()모든 인수를 쉼표로 구분하는 대체 구문도 지원합니다.

rgb() = rgb( <percentage>#{3} , <alpha-value>? ) |
        rgb( <number>#{3} , <alpha-value>? )

또한 레거시 이유로 인해 rgba()문법과 동작이 동일한 함수도 존재합니다 rgb().

또는 RGB 16 진 표기법 #RRGGBB형식

5.2. RGB 16 진 표기법 :#RRGGBB

CSS 16 진수 색상 표기법을 사용하면 채널을 16 진수로 지정하여 색상을 지정할 수 있습니다. 이는 컴퓨터 코드에서 색상을 직접 작성하는 방법과 유사합니다. rgb()표기법으로 같은 색상을 쓰는 것보다 짧습니다 .

(A)의 문법 <hex-color>A는 <hash-token>그 값이 3, 4, 6, 8 또는 16 진수로 구성 토큰. 즉, 16 진 색상은 해시 문자 "#"로 기록되고 그 뒤에 숫자 0-9 또는 문자 af가옵니다 (문자의 경우 중요하지 않음- #00ff00와 동일 함 #00FF00).

주어진 16 진 숫자의 수는 16 진 표기법을 RGB 색상으로 디코딩하는 방법을 결정합니다.

6 자리

16 진수로 해석되는 첫 번째 숫자 쌍은 색상의 빨간색 채널을 지정합니다. 여기서 00최소값을 ff나타내고 10 진수로 255는 최대 값을 나타냅니다. 같은 방식으로 해석되는 다음 숫자 쌍은 녹색 채널을 지정하고 마지막 쌍은 파란색을 지정합니다. 색상의 알파 채널이 완전히 불투명합니다.

실시 예 2
즉, (라임 그린) #00ff00과 동일한 색을 나타낸다 rgb(0 255 0).

CSS 색상 모듈 레벨 4의 편집자 초안 참조

CSS rgb()함수 ( 공백 문자 는 쉼표 문자로 대체 될 수 있습니다 ( 예 :) rgb(0 255 0))

// `rgb()` `<percentage>` as strings in resulting array
['rgb(0%,0%,0%)', ...,'rgb(0%,255%,0)', ...'rgb(255,255,255)']

// `rgb()` `<number>` as strings in resulting array
['rgb(0,0,0)', ...,'rgb(0,255,0)', ...'rgb(255,255,255)']

CSS RGB 16 진 표기법 RRGGBB

// RGB hexadecimal notation as strings in resulting array
['#000000', ...,'#00ff00', ...'#ffffff']

우승 기준

프로그램을 쓰는 데 사용 된 최소 바이트.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Mego

답변:


8

R , 25 바이트

sprintf("#%06X",1:2^24-1)

온라인으로 사용해보십시오!


R에 익숙하지 않지만 # 000000을 출력하지 못합니까?
nyanpasu64

2
아니요, # 000000을 출력합니다.
J.Doe

@ jimbo1qaz은 a:b-c행 벡터하게 a-c행을 b-c, 포함하는 (이것으로부터 벡터하게 a하는 b후 감산 c각 엔트리에서).
Arthur

2
아, 그래서 R은 산술보다 우선 순위가 더 높은 콜론을 지정합니다 ...
nyanpasu64

7

파이썬 2 , 77 40 39 37 바이트

print['#%06X'%c for c in range(8**8)]

온라인으로 사용해보십시오!

Digital Trauma 덕분에 -1 바이트

Dylnan 덕분에 -2 바이트


2
왜 람다가 필요합니까? 목록 이해 자체가 올바른 답이 아닙니까?
Adirio

2
바이트를 저장하는 8**8대신 시도1<<24
Digital Trauma

2
방법에 대한print['...
dylnan

1
@Adirio 값만으로는 도전의 구현으로 간주되지 않습니다.
Jonathan Frech

2
@Adirio 당신 은 파이썬 터미널 [...]에 [...]를 썼다 . 따라서 당신의 제출은 파이썬 2가 아닌 파이썬 2 REPL 로 작성 될 것이다 .
Jonathan Frech

6

PowerShell , 28 26 바이트

1..16mb|%{"#{0:x6}"-f--$_}

온라인으로 사용해보십시오!

에서 루프 116mb(16777216). 각 반복마다, 우리 는 문자열에 대해 -f미리 감소 된 현재 숫자에 작용 하는 ormat 연산자를 사용 --$_합니다 "#{0:x6}". 여기서는 해시 가 앞에 있는 숫자로 x채워진 값을 지정 합니다 . TIO에서는 60 초 / 128KiB의 출력으로 제한됩니다. 변경 을 보고 어떻게 끝나는 .6#1(16mb-5)


6

자바 스크립트 (ES7), 65 62 61 바이트

저장 3 4 @tsh 덕분 바이트

#RRGGBB문자열 배열을 반환합니다 .

_=>[...Array(n=8**8)].map(_=>'#'+(n++).toString(16).slice(1))

온라인으로 사용해보십시오! (잘린 출력)


현재 Python 솔루션 8**8대신을 사용 합니다 1<<24. JS에서도 작동합니다.
tsh


4

apt, 14 바이트

로 출력합니다 #rrggbb.

G²³ÇsG ùT6 i'#

시도해보십시오 (처음 4096 요소로 제한됨)


설명

G                  :16
 ²                 :Squared
  ³                :Cubed
   Ç               :Map the range [0,result)
    sG             :  Convert to base-16 string
       ù           :  Left pad
        T          :   With 0
         6         :   To length 6
           i'#     :  Prepend "#"

재미있는 언어. 왜 문자 T가 "0"에 사용되는지 아십니까? 바이트를 저장하려면 16-> G를 얻지 만 T-> 0은 동일하지 않습니다.
Alec

@Alec T를 0으로
바꾸면

아. 이전 / 다음 숫자와 결합하지 않으려는 경우 숫자 당 하나의 문자가 있습니까?
Alec

geokavel이 말한 것처럼 @Alec 은이 특별한 경우에 전달되는 2 개의 인수를 구분하기 위해 쉼표를 사용해야하는 바이트를 절약합니다 ù. 또 다른 일반적인 사용 사례는 예를 들어 배열에 매핑하는 동안 변수를 증가시켜야 할 때 카운터로 사용하는 것입니다. 물론 변수이기 때문에 필요한 경우 간단히 값을 할당 할 수도 있습니다. 0기술적으로 6 입력 변수 U-Z기본값 은 7 인 고유 한 변수가있는 유일한 한 자리 정수입니다 0. Japt에서 변수에 지정된 다른 정수는 다음과 같습니다 -1, 10-16, 32, 64 & 100.
얽히고 설킨

Japt에 대해 더 자세히 알고 싶으시면 채팅방 에서 자유롭게 핑을 보내 십시오 .
얽히고 설킨



3

배치, 87 바이트

@set s= in (0,1,255)do @
@for /l %%r%s%for /l %%g%s%for /l %%b%s%echo rgb(%%r,%%g,%%b)

CSS 형식으로 출력합니다. 변수 대체는 for명령문이 구문 분석 되기 전에 발생 하므로 실제 코드는 다음과 같습니다.

@for /l %%r in (0,1,255)do @for /l %%g in (0,1,255)do @for /l %%b in (0,1,255)do @echo rgb(%%r,%%g,%%b)



2

K (oK) , 19 바이트

해결책:

$(3#256)\'!16777216

온라인으로 사용해보십시오! (처음 500 숫자로 제한)

설명:

RGB 문자열을 덤프하십시오. 0에서 16777216 사이의 각 숫자를 기본 256으로 변환 한 다음 문자열로 변환하십시오 ...

$(3#256)\'!16777216 / the solution
          !16777216 / range 0..16777215
 (     )\'          / split each both
  3#256             / 256 256 256
$                   / string

2

MATL , 17 15 바이트

10W:q'#%06X,'YD

온라인으로 사용해보십시오!

TIO 버전은 타임 아웃되지 않은 첫 2 ^ 10 만 표시합니다. 바닥 글에 최종 반복을 포함시켜 실제로 종료 시임을 나타냅니다 #FFFFFF. fprintf문자열을 수동으로 조립하는 대신 로 변경하여 1 바이트를 저장했습니다 . 쉼표로 구분 된 목록을 출력합니다.

설명

24W:q            % Range from 0 to 2^24-1
     '#%06X,'    % fprintf format spec (# followed by hexadecimal, zero-padded, fixed-width, followed by newline)
             YD  % Call fprintf. Internally loops over range.

2

APL (Dyalog Unicode) , 47 43 20 바이트

'#',(⎕D,⎕A)[↑,⍳616]

온라인으로 사용해보십시오!

22416⍴4⍴

23 바이트에 대한 @Dzaima 및 @ngn 덕분에.

사용합니다 ⎕IO←0.

어떻게:

'#',(⎕D,⎕A)[↑,⍳616]  Main function
               616   Generate every possible 6 digit hex number in a matrix format
              ,        Ravel the matrix (from a 16x16x16x16x16x16 matrix to a 16^6x2 list)
                      Mix; (turns the list into a 16^6x2 matrix)
    (⎕D,⎕A)[       ]  Use that matrix to index the vector of the digits 0-9 concatenated with the alphabet.
'#',                   Then prepend a '#' to each.


1

V , 25 바이트

8É00lrx16777215ñÄ<C-a>ñ0<C-v>Gls#

온라인으로 사용해보십시오! (로 대체 1677721531)

설명

8É0                                " insert 8 zeroes
   0l                              " move cursor to the second character
     rx                            " replace by x
       16777215ñ      ñ            " 16777215 times do ..
                Ä                  " .. duplicate line
                 <C-a>             " .. increment (leading 0x makes sure it uses hexadecimals)
                       0<C-v>      " move cursor to beginning of line and start selection
                             Gl    " select the column with 0x
                               s#  " replace by #

1

배치, 69 + 4 = 73

g.cmd, 69

for /L %%A in (0,1,16777215)do cmd/kexit %%A&set #%%A=#!=exitcode:~2!

형식이있는 16 진 값을 #RRGGBB'배열'에 저장합니다 .

g.cmd를 사용하여 호출됩니다 cmd /V/Q/K g.cmd. 여기서 +4는 +에 /V/Q비해 4 개 추가 문자로 계산됩니다 cmd /K g.cmd. 메모리에 '배열'이있는 환경을 설정합니다. 또한 실행하는 데 시간이 오래 걸리므로 매우 낮은 값을 사용하여 실행을 시도하거나 중단하십시오.Ctrl+C


고장

호출

  • /V확장 지연이 가능하지만보다 짧아서 처음에 전화 setlocal EnableDelayedExpansion가 필요한 이유cmd
  • /Q 출력을 생략하고 다음과 같습니다. @echo off
  • /K표현식 (이 경우 g.cmd) 을 실행하고 나중에 종료하지 않도록 사용하여 'Array'를 사용하여 확인할 수 있습니다.set #

g.cmd

for /L %%A IN (0,1,16777215) DO (
    cmd /k exit %%A
    set #%%A=#!=exitcode:~2!
)

이 비트는 여기 에 설명 된 트릭을 사용하여 일반 숫자를 16 진수로 변환 한 다음 해당 값을 '배열'에 저장합니다.


나는 그 저장 구조를 '배열'이라고 부르고 있지만 실제로는 실제 배열이 배치에 없기 때문에 정확하지 않습니다. 그러나 변수의 이름을 배열과 같은 이름으로 가질 수 있습니다.

set elem[1]=First element
set elem[2]=Second one

또는이 경우와 같이 :

set #1=First element
set #2=Second one

당신은 여전히 ​​통해 통해 액세스 할 수 있습니다 !#%position%!


잘 모르겠습니다. 그러나 /V/Q/K통역사는 "인수"라고 주장 할 수 있으며 "3 + 69 = 72"로 계산 될 수 있습니다. meta
tsh

나는 그것을 몰랐고 그에 따라 대답을 업데이트 할 것입니다. Thx @tsh

0

그루비 , 53 바이트

c={a=[];(1<<24).times{a.add "".format("#%06x",it)};a}

기능 정의. c ()는 ArrayList를 반환합니다 (질문이 배열을 요구하더라도 괜찮습니다).

암시 적 유형의 언 골프 드 :

ArrayList<String> c = {
    ArrayList<String> a = []
    (1 << 24).times { 
        a.add("".format("#%06x", it)) // add the hex-formatted number to the list.
    }
    return a
}

온라인으로 사용해보십시오!


0

자바 10, 87 84 바이트

v->{int i=1<<24;var r=new String[i];for(;i-->0;)r[i]="".format("#%06X",i);return r;}

@ archangel.mjj 덕분에 -3 바이트 .

온라인으로 사용해보십시오 (첫 번째 4,096항목으로 제한 ).

설명:

v->{                       // Method with empty unused parameter & String-array return-type
  int i=1<<24;             //  Integer `i`, starting at 16,777,216
  var r=new String[i];     //  Result String-array of that size
  for(;i-->0;)             //  Loop `i` in the range (16777216, 0]
    r[i]=                  //   Set the `i`'th item in the array to:
      "".format("#%06X",i);//   `i` converted to a hexadecimal value (of size 6)
  return r;}               //  Return the result-array

아, 당신은 내가 글을 쓰는 동안 이것을 게시 했으므로 우리는 매우 비슷한 대답을합니다. 당신은 세 바이트로 향상시킬 수 있습니다r[i]="".format("#%06X",i);
archangel.mjj

@ archangel.mjj 아, 난 바보 야. 감사! 실제로 "".format("#%06X",i)파이썬 답변에서 그것을 본 이후로 이전에 있었지만 TIO에 충분히 빨리 작동하지 못했기 때문에 답변을 삭제했습니다. 그런 다음 모든 사람들이 4,096TIO 에서 첫 번째 항목을 출력하는 것을 보았 으므로 답을 다시 써서 잊어 버렸습니다 "#%06X"...>. <
Kevin Cruijssen

@KevinCruijssen 난 당신이 할 수 몰랐어요 var r.. 자바
FireCubez

@FireCubez Java 10부터 새로 추가되었습니다. :) 여기var
Kevin Cruijssen

0

PHP, 68 62 바이트

이것은 파일 내부에 있어야하며, 배열은 마지막에 반환되어 사용 가능합니다.

<?foreach(range(0,1<<24)as$i)$a[]=sprintf('#%06x',$i);return$a;

배열에 액세스하려면 단순히 include (예 :) 결과를 $a = include 'xyz.php';변수에 제공하십시오.


6 바이트를 절약하고 실수를 해결하는 @manatwork 덕분에 .


1
이것이 %1$06d형식 문자열로 16 진수를 출력 합니까? 그리고을 사용할 이유가 없습니다 1$. 형식 문자열에 "#"을 포함시켜 길이를 줄일 수 있습니다 #%06x.. 현재 최대 16777216 = # 1000000으로 계산되므로 범위를 수정하기 위해 추가 문자를 추가 할 때 편리합니다.
manatwork

음, .... 깜빡하지 않은 경우 변경하는 것 %d까지 %x. 그리고 통화 #내부 를 움직이는 것을 완전히 잊어 버렸습니다 sprintf(). 당신은 저를 6 바이트 절약했습니다. 감사합니다
Ismael Miguel

0

MATL , 11 바이트

'#'5Y26Z^Yc

온라인으로 사용해보십시오! (6 자리 대신 3 자리 16 진수 만)

설명

'#'   % Push this character
5Y2   % Push '01234567890ABCDEF'
6     % Push 6
Z^    % Cartesian power. Gives a (16^6)×6 char matrix
Yc    % String concatenation. '#' is implicitly replicated
      % Implicitly display




0

T-SQL, (122) 117 바이트

16,777,216 행의 #RRGGBB문자열 테이블을 반환합니다. 줄 바꿈은 가독성을위한 것입니다.

WITH t AS(SELECT 0n UNION ALL SELECT n+1FROM t WHERE n<16777215)
SELECT'#'+FORMAT(n,'X6')FROM t option(maxrecursion 0)

0에서 2 ^ 24-1까지의 숫자 테이블에 재귀 CTE를 사용한 다음 기본 FORMAT제공 명령 (SQL 2012 이상에서 사용 가능)을 사용하여 6 자리 16 진 문자열로 바꿉니다 . 를 부착 #전면에, 우리는 완료됩니다.

편집 1 : 제거 된 POWER()기능, 숫자가 짧았습니다 : P



0

젤리 , 8 바이트

ØHṗ6”#;Ɱ

온라인으로 사용해보십시오! (참고 : 사용 2하기보다는 6같은 6TIO에 시간 초과)

함수 제출 (Jelly 전체 프로그램은 기본적으로 문자열을 구분하지 않고 문자열 목록을 인쇄하여 경계를보기 어렵 기 때문에). TIO 링크에는 줄 바꾸기를 사용하여 문자열 목록을 인쇄하여 구분하는 래퍼가 있습니다.

설명

ØHṗ6”#;Ɱ
ØH         All hex digits (“0123456789ABCDEF”)
  ṗ6       Find all strings of 6 of them (order relevant, repeats allowed)
    ”#;    Prepend “#”
       Ɱ     to each of the resulting strings

1
관심 없음-왜 답변을 커뮤니티 위키로 만들었습니까?
Jonathan Frech

@JonathanFrech : 나는 모든 게시물에 대해이 작업을 수행합니다. 위키 마커는이를 나타내는 방법입니다. Stack Exchange의 평판 시스템은 어느 정도 완전히 손상되었습니다. 과거의 계정에서, 나는 일주일 동안 매일 시스템을 얼마나 쉽게 게임 할 수 있었는지 보여주기 위해 의도적으로 한 번 반복해서 rep-capped했습니다. 요즘에는 평판이 높지 않기 때문에 사이트가 귀하를 설득하려고 시도하기 때문에 사이트에 참여하고 싶지 않습니다.
ais523

호기심-평판 시스템을 게임하기 위해 어떤 스택에서 달성 했습니까?
Jonathan Frech

@JonathanFrech : 이것입니다. 저는 20k 사용자 였지만 결국 내 계정을 망쳐 놓았 기 때문에 평판 시스템이 나아졌으며 평판 시스템이 적극적으로 사이트를 악화시키는 콘텐츠를 만들도록 적극적으로 밀어 붙 였기 때문에 계정을 삭제했습니다.
ais523



0

펄 6 , 26 바이트

{map *.fmt("#%06X"),^8**8}

온라인으로 사용해보십시오!

다른 사람과 동일한 형식을 사용합니다. TIO 시간이 초과되었습니다.

또는 RGB 형식으로 :

31 바이트

{map {"rgb($_)"},[X] ^256 xx 3}

온라인으로 사용해보십시오!


rgb 출력 rgb(0, 0, 0)에 문자열 이 포함 되어야한다고 생각합니다 rgb.
nwellnhof

@ nwellnhof 업데이트 (16 진수를 수행하는 것이 더 짧았지만)
Jo King
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.