![]() |
|
||||||||||
|
|||||
|
4AM Games
|
Нету комментариев в стиле JavaDoc, если не знаешь что такое то пишутся они так
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Оригинал?
/*****************************************************
*
* Peter Hall 2002
* www.peterjoel.com
*
* HSB conversion methods for the Color object
*
* myCol.setHSB({H:hue, S:sat, B:bri})
* myCol.getHSB()
* - returns {H:hue, S:sat, B:bri}
*
* Static methods:
*
* Color.RGB_to_HSB(0xRRGGBB)
* - returns {H:hue, S:sat, B:bri}
* Color.HSB_to_RGB({H:hue, S:sat, B:bri})
* - returns 0xRRGGBB
*
* The colour-space conversion is based purely on
* my own interpretation and intuitive notion of the
* colour spaces. These methods may produce results
* which vary slightly from conversions carried out
* by different graphical software that you may be
* used to.
*
* If this script enables you or your company to make
* significant financial gain, you might like to make
* a contribution to show your appreciation. Please
* see my site for more information.
*
******************************************************/
Color.prototype.setHSB = function(colHSB){
var hue = (colHSB.H == null) ? 0 : (360+colHSB.H)%360;
var sat = (colHSB.S == null) ? 100 : colHSB.S;
var bri = (colHSB.B == null) ? 100 : colHSB.B;
this.setRGB(Color.HSB_to_RGB({H:hue,S:sat,B:bri}));
}
Color.prototype.getHSB = function(){
return Color.RGB_to_HSB(this.getRGB());
}
Color.RGB_to_HSB = function(colRGB){
var red = (colRGB&0xFF0000)>>16;
var gre = (colRGB&0x00FF00)>>8;
var blu = colRGB&0x0000FF;
var max = Math.max(red,Math.max(gre,blu));
var min = Math.min(red,Math.min(gre,blu));
var colHSB = {}
colHSB.B = Math.round(max*100/255);
if(max==min){ // if grey
colHSB.S = 0;
colHSB.H = 0;
}else{
colHSB.S = Math.round(100*(max-min)/max);
// find hue
var hue;
var tmpR = (max-red)/(max-min);
var tmpG = (max-gre)/(max-min);
var tmpB = (max-blu)/(max-min);
if(red==max){
hue = tmpB - tmpG;
}else if(gre==max){
hue = 2 + tmpR - tmpB;
}else if(blu==max){
hue = 4 + tmpG - tmpR;
}
colHSB.H = (Math.round(hue*60) + 360)%360;
}
return colHSB;
}
Color.HSB_to_RGB = function(colHSB){
var sat = colHSB.S;
var bri = colHSB.B;
var red, gre, blu;
// if grey don't bother doing any more
if(sat==0){
red = bri;
gre = bri;
blu = bri;
}else{
var hue = (colHSB.H+360)%360;
var hue2 = Math.floor(hue/60);
var dif = (hue%60)/60;
var mid1 = bri*(100-sat*dif)/100;
var mid2 = bri*(100-sat*(1-dif))/100;
var min = bri*(100-sat)/100;
if(hue2 == 0){
red = bri;
gre = mid2;
blu = min;
}else if(hue2 == 1){
red = mid1;
gre = bri;
blu = min;
}else if(hue2 == 2){
red = min;
gre = bri;
blu = mid2;
}else if(hue2 == 3){
red = min;
gre = mid1;
blu = bri;
}else if(hue2 == 4){
red = mid2;
gre = min;
blu = bri;
}else{
red = bri;
gre = min;
blu = mid1;
}
}
return (Math.round(red*255/100)<<16 | Math.round(gre*255/100) <<8 | Math.round(blu*255/100));
}
|
|
|||||
|
Регистрация: May 2006
Адрес: Город О
Сообщений: 169
|
Не знаю, насколько нужны точные вычисления цвета, но просто затемнить или высветлить - по моему не так уж и сложно.
Когда то решал подобную задачу но в пределах RGB - без классов и прочего (извините, если не модно)) function deRGB(colour:Number):Object {
var rr:Number = (colour & 0xFF0000) >> 16;
var gg:Number = (colour & 0x00FF00) >> 8;
var bb:Number = colour & 0x0000FF;
return {R:rr,G:gg,B:bb}
}
var color:Number = 0xFF0000;
var colors:Object = deRGB(color);
var mr:Number = Math.floor(colors.R/3);
var mg:Number = Math.floor(colors.G/3);
var mb:Number = Math.floor(colors.B/3);
var darkerColor:Number = (mr << 16) + (mg << 8) + mb;
Конечно, коды уже приведенные здесь, безусловно круче и техничнее )) Но помоему решают несколько другие задачи. Последний раз редактировалось bbexp; 13.06.2006 в 14:44. |
|
|||||
|
нет они решают именно те задачи, но и еще и дрегие заодно, например с этим классом совсем нетрудно "сдвинуть цвет по спектру" (поменять hue) или поменять насыщенность
__________________
Хороший отдых - половина работы. |
|
|||||
|
[+1.3 03.08.07]
Регистрация: Nov 2005
Адрес: moscow
Сообщений: 26
|
Цитата:
|
|
|||||
|
[+1.3 03.08.07]
Регистрация: Nov 2005
Адрес: moscow
Сообщений: 26
|
Кривое-то решение я нашел на скорую руку. Задаю вторым цветом черный либо белый (в зависимости от оттенка второго цвета, который мне нужен) и выношу его "начало" подальше от заливаемой области. Получается эдакая имитация :-)
|
![]() |
![]() |
Часовой пояс GMT +4, время: 02:47. |
|
|
« Предыдущая тема | Следующая тема » |
|
|