2011-01-20 48 views
21

Làm cách nào để chuyển đổi các giá trị byte nguyên của màu đỏ, xanh lá cây và xanh lam thành chuỗi hex, sau đó có thể gán cho một ngữ cảnh để hiển thị trên canvas HTML5?Chuyển đổi số nguyên thành chuỗi thập lục phân trong JavaScript

Ví dụ, chuyển đổi màu lục lam,

var r = 0; 
var g = 255; 
var b = 255; 

Để một chuỗi hex cho gán đến một màu sắc bối cảnh điền.

this.context.fillStyle = '#00FFFF'; 

Hoặc có cách nào tốt hơn để làm điều này hoàn toàn không?

Trả lời

16

Chỉ cần sử dụng các giá trị RGB, như:

this.context.fillStyle = "rgb(0,255,255)"; 
+0

Câu trả lời hay nhất luôn đơn giản nhất! –

+0

Nhưng cảm ơn tất cả những người khác đã trả lời, họ là những câu trả lời thú vị và có giá trị đối với kiến ​​thức và sự hiểu biết của tôi. +1 mỗi. –

+0

Trình duyệt chéo này có tương thích không? –

0

Bạn có thể viết phương pháp riêng của bạn cho chuyển đổi này -

// function to generate the hex code 
function getHex(dec) 
{ 
    var hexArray = new Array("0", "1", "2", "3", 
           "4", "5", "6", "7", 
           "8", "9", "A", "B", 
           "C", "D", "E", "F"); 

    var code1 = Math.floor(dec/16); 
    var code2 = dec - code1 * 16; 

    var decToHex = hexArray[code2]; 

    return (decToHex); 
} 

gốc nguồn - http://programming.top54u.com/post/Javascript-Convert-Decimal-to-Hex.aspx

+0

Điều này sẽ chỉ chuyển đổi một nibble. –

+0

@El Ronnoco - Vui lòng kiểm tra liên kết. Chúng tôi chạy một vòng lặp để gọi hàm này khi số thập phân lớn hơn 15. –

+0

-1 Không cần phải viết lại toString – Tomas

1
function pad(number, length) { 
    var str = '' + number; 
    while (str.length < length) str = '0' + str; 
    return str; 
} 

function toRGBHex(r,g,b) { 
    return pad(r.toString(16),2) + pad(g.toString(16),2) + pad(b.toString(16),2); 
} 
24

Để chuyển đổi một số thành hex, bạn có thể sử dụng hàm toString (16) tích hợp sẵn. mã đơn giản:

function convert(integer) { 
    var str = Number(integer).toString(16); 
    return str.length == 1 ? "0" + str : str; 
}; 

function to_rgb(r, g, b) { return "#" + convert(r) + convert(g) + convert(b); } 

var color = to_rgb(r, g, b); 
11

Tôi nghĩ, cách đơn giản nhất là:

 
var g = 255; 
g.toString(16); //gives "ff" 

Sử dụng tính năng cung cấp cho ngôn ngữ.

+7

Câu trả lời này thiếu 0-padding cần thiết cho các giá trị màu thập lục phân. – Phrogz

+2

'0x' + g.toString (16), thêm một tiền tố là khá đơn giản – raykin

1

Để chuyển đổi giá trị RGB riêng lẻ thành màu hex, bạn có thể sử dụng chức năng này, mặc dù việc sử dụng "rgb("+r+","+g+","+b+")" thay vào đó sẽ có ý nghĩa hơn.

function rgbToHex(r,g,b) { 
    return "#"+("00000"+(r<<16|g<<8|b).toString(16)).slice(-6); 
} 
+0

~ fyi Tôi đã kết hợp chỉnh sửa của bạn cho câu trả lời của tôi, mặc dù nó đã bị từ chối. http://stackoverflow.com/questions/17945972/converting-rgba-values-into-one-integer-in-javascript/17946089#17946089 (không có cách nào tốt để gửi tin nhắn ở đây) – MightyPork

+0

@MightyPork oh, alright, cảm ơn vì đã nói tôi. Phải, có một cách để mọi người vào đây. Oh well. – kamoroso94

Các vấn đề liên quan