有什么方法可以在C#.net下生成一个自定义的256色调色板(就是0到255每个数都对应一个颜色)

作者&投稿:邢初 (若有异议请与网页底部的电邮联系)
C#中byte就是一0到255的整数,它有什么用啊?什么场合下用啊?有经验的网友举个例子呗~

byte是0-255 正好和8位二进制数表示长度一致 11111111 ,在32位系统中一个字节正好是8位,所以这个数据类型一般是做内存中的一些特殊算法设计的,比如位运输,左移,右移,还有一项特殊数据结构比如读写文件的字节数组byte[]等等和系统底层有关的这些,当然你把它当成小范围的整型类型也可以用

Bit-深度 色彩数
1 2 (monochrome)
2 4 (CGA)
4 16 (EGA)
8 256 (VGA)
16 65,536 (High Color, XGA)
24 16,777,216 (True Color/真彩色, SVGA)
32 16,777,216 (True Color + Alpha Channel/控制透明度,-游戏特效)

关于256色,早先的一些较为形象的解释是理解为256个油漆桶/256色调色板,分配给它们编号/索引号。“叫到哪个颜色”哪个颜色就出来填充像素。因为如16色、256色的色彩数有限所以这么解释很简单易理解。然而电脑操作过程中必须经过数码编码,那么实际上256种颜色对应256个数码(二进制数值),也就是2^2 * 2^3 * 2^3 = 2^8 = 256。256色模式下电脑没有必要去按24bit处理,在当时DOS时代,处理8bit色彩比24bit要容易多了。

当然256色中的任意一种颜色都可以用24bit表示,甚至可以用32bit,64bit表示。但是不管如何,24bit模式就意味着17.7million种颜色。256色模式就意味着256种颜色,或者理解为24bit的17.7million种颜色中的256个颜色。
256色模式: 共8 bits (B: 2 bits; G: 3 bits; R: 3 bits)。
High color:共16 bits (B: 5 bits, G: 6 bits, R: 5 bits)。
True color:一般24bit就是8bit/通道,真彩色。
windows下的32位是R、G、B三个通道各占8位共24位,加上明度通道8位,所以是32位,24位也就是R、G、B三个通道各占6位共18位,加上明度通道6位,所以是24位。
32位色中的24位用来保存颜色信息(R8G8B8),另外的8位用来保存ALPHA信息,ALPHA属性就是透明度。
24位色也有几种表示,可以是R5G6B5,也可以是R5G5B5,等等
16位色块可能会比较少,32比较好点
在颜色数方面,当然很明显,是2的16次方、24次方和32次方的差别。从人眼的感觉来说,16位色能基本满足显示需要,粗看起来和24位色、32位色差不多,仔细点研究的话,会发现在大面积的渐变色中16位色显示会出现隐约的分隔线。实际应用中,最常用的是24位色,比如网页和其他地方表示颜色的“#80FF2E”之类的字符串,用答CDSee看图片也可以看到大部分图片的色深是24位。至于32位色,那是在24位基础上加出来的,据说是加了8位透明色,实际和24位色没多大差别,至少我们的眼睛是分辨不出来的。

32位色是指我们图像的rgb各8位,然后再加上z-buffer 8位凑成32位!其中真彩24位就足够了!然后后面的8位是在3d的显示中的!
什么是24位BMP图片:

24是指图片颜色的位数,只所以图片要分颜色的位数,是因为既然图片以“像素”形式存贮着,就要记录下来第个“像素”的颜色值,这样才能在打开图片时看到存贮的图片。
记录每一个像素的颜色值占用的二进制位数,就是BMP图片的位数,记录颜色值时又有不同的方法,比如用RGB值,也就是记录下红(RED)、绿(GREEN)、蓝(BLUE)的颜色值进行混合,还有XRGB、ARGB等等。
比如16位颜色值,可心这样分:X1位,R5位,G5位,B5位;R5位,G6位,B5位或者是X、R、G、B均4位等等;
24位颜色值称为“真彩色”,它有着统一的颜色分配:R8位,G8位,B8位;
32位颜色值一般这样分配:X8位,R8位,G8位,B8位或A8位,R8位,G8位,B8位。
当然还有更多的不同颜色值的图片,比如1位的,4位的,8位的等等,每种颜色值所用的位数越多,则表现这种颜色深度的精度越高,所有图像也越逼真,当然图片的容量也就越大。
在实用美术中,常有"远看色彩近看花,先看颜色后看花,七分颜色三分花"的说法。
  这也就说明,在任何设计中,色彩对视觉的刺激起到第一信息传达的作用。因此,对色彩的基础知识的良好掌控,在网页设计中才能做到游刃有余。

  为了使下面的网页配色分析更易于理解,我们先来了解色彩的RGB模式和HSB模式。

 RGB
  RGB是表示红色绿色蓝色又称为三原色光,英文为R(Red)、G(Green)、B(Blue),在电脑中,RGB的所谓"多少"就是指亮度,并使用整数来表示。
  通常情况下,RGB各有256级亮度,用数字表示为从0、1、2至255。虽然数字最高是255,但0也是数值之一,因此共256级。按照计算,256级的RGB色彩总共能组合出约1678万种色彩,即256×256×256=16777216。通常也被简称为1600万色或千万色。也称为24位色(2的24次方)。
  对于单独的R或G或B而言,当数值为0时,代表这种颜色不发光;如果为255,则该颜色为最高亮度。因此当RGB三种色光都发到最强的亮度,纯白的RGB值就为255,255,255。屏幕上黑的RGB值是0,0,0。R,意味着只有红色存在,且亮度最强,G和B都不发光。因此最红色的数值是255,0,0。同理,最绿色就是0,255,0;而最蓝色就是0,0,255。黄色较特殊,是由红色加绿色而得就是255,255,0



对于M8 来说 32位色与24位色基本没有什么差别。8个透明度的处理,我们也看不出什么。而采用32位色的关键在于:

24bit 和 32bit 是一样的,由于24bit不能在显存中对齐,所以不是所有的显卡都能支持。反而 32bit 因为可对齐,大多数的显卡都支持(当然显存要足够大)。32bit实际上也是24bit,一般都在 MSB 上填充 8bit 的 0 或 alpha (没有实际效果)。

<HTML>
<HEAD>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>

<STYLE type=text/css>
TD {FONT-SIZE: 10.8pt}
BODY {FONT-SIZE: 10.8pt}
BUTTON {WIDTH: 5em}
</STYLE>

<SCRIPT LANGUAGE=JAVASCRIPT SRC="dialog.js"></SCRIPT>

<SCRIPT language=JavaScript>

var sAction = URLParams['action'] ;
var sTitle = "";
var color = "" ;
var oSelection;
var oControl;
var sRangeType;

switch (sAction) {
case "forecolor": // 字体前景色
sTitle = "字体前景色";
oSelection = dialogArguments.eWebEditor.document.selection.createRange();
color = oSelection.queryCommandValue("ForeColor");
if (color) color = N2Color(color);
break;
case "backcolor": // 字体背景色
sTitle = "字体背景色";
oSelection = dialogArguments.eWebEditor.document.selection.createRange();
color = oSelection.queryCommandValue("BackColor");
if (color) color = N2Color(color);
break;
case "bgcolor": // 对象背景色
sTitle = "对象背景色";
oSelection = dialogArguments.eWebEditor.document.selection.createRange();
sRangeType = dialogArguments.eWebEditor.document.selection.type;
if (sRangeType == "Control") {
oControl = GetControl(oSelection, "TABLE");
}else{
oControl = GetParent(oSelection.parentElement());
}
if (oControl) {
switch(oControl.tagName){
case "TD":
sTitle += " - 单元格";
break;
case "TR":
case "TH":
sTitle += " - 表格行";
break;
default:
sTitle += " - 表格";
break;
}
color = oControl.bgColor;
}else{
sTitle += " - 网页";
}
break;
default: // 其它颜色框
if (URLParams['color']){
color = decodeURIComponent(URLParams['color']) ;
}
break;
}

document.write("<TITLE>颜色选择(" + sTitle + ")</TITLE>");

// 默认显示值
if (!color) color = "#000000";

// 返回有背景颜色属性的对象
function GetParent(obj){
while(obj!=null && obj.tagName!="TD" && obj.tagName!="TR" && obj.tagName!="TH" && obj.tagName!="TABLE")
obj=obj.parentElement;
return obj;
}

// 返回标签名的选定控件
function GetControl(obj, sTag){
obj=obj.item(0);
if (obj.tagName==sTag){
return obj;
}
return null;
}

// 数值转为RGB16进制颜色格式
function N2Color(s_Color){
s_Color = s_Color.toString(16);
switch (s_Color.length) {
case 1:
s_Color = "0" + s_Color + "0000";
break;
case 2:
s_Color = s_Color + "0000";
break;
case 3:
s_Color = s_Color.substring(1,3) + "0" + s_Color.substring(0,1) + "00" ;
break;
case 4:
s_Color = s_Color.substring(2,4) + s_Color.substring(0,2) + "00" ;
break;
case 5:
s_Color = s_Color.substring(3,5) + s_Color.substring(1,3) + "0" + s_Color.substring(0,1) ;
break;
case 6:
s_Color = s_Color.substring(4,6) + s_Color.substring(2,4) + s_Color.substring(0,2) ;
break;
default:
s_Color = "";
}
return '#' + s_Color;
}

// 初始值
function InitDocument(){
ShowColor.bgColor = color;
RGB.innerHTML = color;
SelColor.value = color;
}

var SelRGB = color;
var DrRGB = '';
var SelGRAY = '120';

var hexch = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');

function ToHex(n) {
var h, l;

n = Math.round(n);
l = n % 16;
h = Math.floor((n / 16)) % 16;
return (hexch[h] + hexch[l]);
}

function DoColor(c, l){
var r, g, b;

r = '0x' + c.substring(1, 3);
g = '0x' + c.substring(3, 5);
b = '0x' + c.substring(5, 7);

if(l > 120){
l = l - 120;

r = (r * (120 - l) + 255 * l) / 120;
g = (g * (120 - l) + 255 * l) / 120;
b = (b * (120 - l) + 255 * l) / 120;
}else{
r = (r * l) / 120;
g = (g * l) / 120;
b = (b * l) / 120;
}

return '#' + ToHex(r) + ToHex(g) + ToHex(b);
}

function EndColor(){
var i;

if(DrRGB != SelRGB){
DrRGB = SelRGB;
for(i = 0; i <= 30; i ++)
GrayTable.rows(i).bgColor = DoColor(SelRGB, 240 - i * 8);
}

SelColor.value = DoColor(RGB.innerText, GRAY.innerText);
ShowColor.bgColor = SelColor.value;
}
</SCRIPT>

<SCRIPT event=onclick for=ColorTable language=JavaScript>
SelRGB = event.srcElement.bgColor;
EndColor();
</SCRIPT>

<SCRIPT event=onmouseover for=ColorTable language=JavaScript>
RGB.innerText = event.srcElement.bgColor;
EndColor();
</SCRIPT>

<SCRIPT event=onmouseout for=ColorTable language=JavaScript>
RGB.innerText = SelRGB;
EndColor();
</SCRIPT>

<SCRIPT event=onclick for=GrayTable language=JavaScript>
SelGRAY = event.srcElement.title;
EndColor();
</SCRIPT>

<SCRIPT event=onmouseover for=GrayTable language=JavaScript>
GRAY.innerText = event.srcElement.title;
EndColor();
</SCRIPT>

<SCRIPT event=onmouseout for=GrayTable language=JavaScript>
GRAY.innerText = SelGRAY;
EndColor();
</SCRIPT>

<SCRIPT event=onclick for=Ok language=JavaScript>
color = SelColor.value;
if (!IsColor(color)){
alert('无效的颜色值!');
return;
}

switch (sAction) {
case "forecolor":
dialogArguments.format('ForeColor', color) ;
window.returnValue = null;
break;
case "backcolor":
dialogArguments.format('BackColor', color) ;
window.returnValue = null;
break;
case "bgcolor":
if (oControl){
oControl.bgColor = color;
}else{
dialogArguments.setHTML("<table border=0 cellpadding=0 cellspacing=0 width='100%' height='100%'><tr><td valign=top bgcolor='"+color+"'>"+dialogArguments.getHTML()+"</td></tr></table>");
}
window.returnValue = null;
break;
default:
window.returnValue = color;
break;
}
window.close();
</SCRIPT>

</HEAD>

<BODY bgColor=menu onload="InitDocument()">
<DIV align=center>
<CENTER>
<TABLE border=0 cellPadding=0 cellSpacing=10>
<TBODY>
<TR>
<TD>
<TABLE border=0 cellPadding=0 cellSpacing=0 id=ColorTable style="CURSOR: hand">
<SCRIPT language=JavaScript>
function wc(r, g, b, n){
r = ((r * 16 + r) * 3 * (15 - n) + 0x80 * n) / 15;
g = ((g * 16 + g) * 3 * (15 - n) + 0x80 * n) / 15;
b = ((b * 16 + b) * 3 * (15 - n) + 0x80 * n) / 15;

document.write('<TD BGCOLOR=#' + ToHex(r) + ToHex(g) + ToHex(b) + ' height=8 width=8></TD>');
}

var cnum = new Array(1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0);

for(i = 0; i < 16; i ++){
document.write('<TR>');
for(j = 0; j < 30; j ++){
n1 = j % 5;
n2 = Math.floor(j / 5) * 3;
n3 = n2 + 3;

wc((cnum[n3] * n1 + cnum[n2] * (5 - n1)),
(cnum[n3 + 1] * n1 + cnum[n2 + 1] * (5 - n1)),
(cnum[n3 + 2] * n1 + cnum[n2 + 2] * (5 - n1)), i);
}

document.writeln('</TR>');
}
</SCRIPT>

<TBODY></TBODY></TABLE></TD>
<TD>
<TABLE border=0 cellPadding=0 cellSpacing=0 id=GrayTable style="CURSOR: hand">
<SCRIPT language=JavaScript>
for(i = 255; i >= 0; i -= 8.5)
document.write('<TR BGCOLOR=#' + ToHex(i) + ToHex(i) + ToHex(i) + '><TD TITLE=' + Math.floor(i * 16 / 17) + ' height=4 width=20></TD></TR>');
</SCRIPT>

<TBODY></TBODY></TABLE></TD></TR></TBODY></TABLE></CENTER></DIV>
<DIV align=center>
<CENTER>
<TABLE border=0 cellPadding=0 cellSpacing=10>
<TBODY>
<TR>
<TD align=middle rowSpan=2>选中色彩
<TABLE border=1 cellPadding=0 cellSpacing=0 height=30 id=ShowColor width=40 bgcolor="">
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE></TD>
<TD rowSpan=2>基色: <SPAN id=RGB></SPAN><BR>亮度: <SPAN
id=GRAY>120</SPAN><BR>代码: <INPUT id=SelColor size=7 value=""></TD>
<TD><BUTTON id=Ok type=submit>确定</BUTTON></TD></TR>
<TR>
<TD><BUTTON onclick=window.close();>取消</BUTTON></TD></TR></TBODY></TABLE></CENTER></DIV>

</BODY></HTML>

不知道这个符不符合你的要求


怎么在c语言中打开cpp文件
1、打开c语言编辑工具,写入cpp文件所编程序源代码。2、 点击 组建-编译-执行。3、执行完程序,点击回车。4、点击文件另存为把文件存到你能够找到的文件夹中,比如桌面。5、打开刚保存文件的文件夹,内含有一个Bebug 的文件夹。6、打开Bebug的文件夹,有一个以.exe为后缀名的文件,也就.cpp文件...

绝对值在c语言中如何实现?
绝对值在c语言中可以用使用abs()函数或fabs()或使用条件运算符、使用条件运算符、使用位运算 ^ 和 >>。1、使用标准库函数 abs() 或 fabs()这是最简单和最常用的方法,只需要引入头文件 <stdlib.h> 或 <math.h>,然后调用 abs() 函数或 fabs() 函数即可。abs() 函数适用于整数,fabs() ...

在C语言中,文件的存取方式
2. 直接存取(随机存取法)很多应用场合要求以任意次序直接读写某个记录。例如,航空订票系统,把特定航班的所有信息用航班号作标识,存放在某物理块中,用户预订某航班时,需要直接将该航班的信息取出。直接存取方法便适合于这类应用,它通常用于磁盘文件。为了实现直接存取,一个文件可以看作由顺序编号的...

C语言中用什么方法可以取出一个16二进制位数的前8位
int main(){ long a=0x6543,b; \/\/定义a为16位们的二进制数(用16进制表示)b=a>>8; \/\/把a的二进制值的后8位移走,就剩前8位了 printf("a=%x\\nb=%x\\n",b); \/\/打印出移位前和移位后的十六进制值.return 0;}

c语言函数可不可以返回多个值
在C语言中,一般情况下函数的返回值是通过函数中的return语句来实现的,每调用一次return语句只能从函数中返回一个值。但在实际很多应用中,我们需要从函数中返回多个值,那我们可以用什么方法实现呢?此时我们可以用三种方法来实现。方法一:设置全局变量 全局变量是在函数外部定义的全局变量,它不属于任何...

C语音中的符号常量的定义方法是什么
符号常量定义: 在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。其特点是编译后写在代码区,不可寻址,不可更改,属于指令的一部分 在c语言中符号常量有3定义的方法 宏定义法,这也是使用最广泛的一种:使用方法: #define 符号 常量值 实例: #define PAI 3.141592...

怎么进行字符串赋值?C语言
在C语言中,字符串的赋值主要有两种方法,第一种是通过指针的方式直接赋值,第二种是通过数组直接赋值。1、指针式赋值。通过程序的运行情况,可以知道:char *p = "hello";这种字符串的赋值方式是完全没有问题的。要理解这种赋值方式,首先得理解双引号(特别注意:这个是双引号,不要赋值的时候给弄了...

C语言中stdin流的用法是什么?
(3)可以用fflush和rewind这两个函数来刷新stdin,来清空缓冲区中已有的内容,不过这种方法不是标准方法,当stdin被重定向到文件时,这会导致指针重新指向文件开头。C语言从stdin读取一行字符串的方法如下:gets gets函数的头文件是<stdio.h>,原型如下:char *gets(char *s);gets从stdin中读入一行内容到...

C语言怎样才能在头文件中实现函数定义?
C语言在头文件中实现函数定义,可以按如下方法:新建一个demo.h(也可以为其它文件名)的头文件,在头文件中添加函数定义,如:extern void demo();新建一个c文件,在文件中将demo.h包含进来:#include“demo.h”,在此文件中将函数的主体写上,如下:void demo(){ printf("Hello.");} 经过上述...

在C语言中double是什么意思?
在C语言中,double是一种浮点数数据类型,它可以表示双李带精度浮点数,即小数点前后的位数更多,精度更高。通常,double类型占用8个字节(64位)的存储空间,可以表示的范围是非常广泛的,一般为±2.22507×10^-308到±1.79769×10^308,精度约为15-16位有效数字。2、浮点数表示方法:浮点数表示...

奉节县18744445500: 有什么方法可以在C#.net下生成一个自定义的256色调色板(就是0到255每个数都对应一个颜色) -
烛寿英太: <HTML><HEAD><META content="text/html; charset=gbk" http-equiv=Content-Type><STYLE type=text/css>TD {FONT-SIZE: 10.8pt}BODY {FONT-SIZE: 10.8pt}BUTTON {WIDTH: 5em}</STYLE><SCRIPT LANGUAGE=JAVASCRIPT SRC="...

奉节县18744445500: C#.net 怎么生成dll? -
烛寿英太: 在你的项目里面添加个类库(文件->添加->新建项目->类库) 然后把这个类库在你的项目里面添加引用 这个类库最后生成的就是 动态链接库 文件了 添加引用后 项目会自动调用dll里面的东西 添加引用 在解决方案资源管理器里面 右键"引用"节点 "添加引用" 浏览到你生成的dll文件即可 或者你可以直接选择项目标签 浏览到类库项目即可 再以后的项目中 如果有同样的或者类似的东西要做 比如说数据库访问的一些内容都写到类库里 以后用到的时候直接在现有项目里添加引用就行了 这样省去了代码的重新编写 这样就实现了代码的重用性

奉节县18744445500: 如何用C#动态生成代码 -
烛寿英太: 经常被朋友问到如何动态生成代码.这个功能是由.NET Framework内置支持的.下面这个方法就是一个简单的例子 private void GenerateCode() {/*注意,先导入下面的命名空间 using System.CodeDom using System.CodeDom.Compiler; ...

奉节县18744445500: 问下在.NET里用C#怎么能生成甘特图? -
烛寿英太: 开源的可以参考这个:http://www.codeproject.com/KB/miscctrl/Gantt_Chart.aspx 但是是VB.net 你需要转换下工程收费的话就有很多第三方控件可以考虑,例如:http://www.evget.com/zh-CN/product/514/download.aspx 当然你自己基于数据用GDI也是可以画的...

奉节县18744445500: .net 下用C#产生一个永不重复10位随机数 -
烛寿英太: 我们在做能自动生成试卷的考试系统时,常常需要随机生成一组不重复的题目,在.net Framework中提供了一个专门用来产生随机数的类System.Random.对于随机数,大家都知道,计算机不可能产生完全随机的数字,所谓的随机数发生器都是...

奉节县18744445500: C#.Net 怎么生成Exe文件?? -
烛寿英太: 自动生成的,在BIN目录下

奉节县18744445500: 如何在.Net的C#中制作DLL文件 -
烛寿英太: 编辑生成DLL文件 打开Microsoft Visual Studio 2010, 新建【windows窗体应用程序】的项目.在项目的基础上新建类库,点击右键,【添加】-【新建项目】.选择【类库】,名称为【ini】.在新增的类库项目中编辑代码,新增class为【Read...

奉节县18744445500: c#.net根据数据库表生成实体类 -
烛寿英太: 可以使用codesmith,动软等生成工具 google,直接搜代码生成工具

奉节县18744445500: C#.net如何批量生成Html,最好给相关代码,一次生成N个页面,不要求一个页面生成的
烛寿英太: 我是这么考虑的,但你输入你的主页地址,想让程序吧首页生成html但是在生成html的同时要找到里面所有.aspx的后缀的连接吧这些连接生成html得到一个地址并且替换首页的.aspx地址.依此类推. 我考虑到下次需要生成,最好吧地址存入数据库例如: http://*************.aspx http://**************.html 当下次需要生成的时候.aspx连接到数据库比对.如果是以前的信息页面,直接吧后面的连接拿出替换, 如果不是自己重新生成. 我前两天想做一个这样的小系统.考虑了一下.但是还不周全,内容也不较多,就给你现提示这些吧.

奉节县18744445500: C#/.NET 动态生成静态页面怎么实现求帮助? -
烛寿英太: 重写render方法 搜索一下吧 我当时是这样的:数据库中加了个字段表示此记录是否已经生成了静态页,然后跳转到此静态页的链接则根据这个字段进行生成,如果需要重新生成静态页,则生成aspx页面的链接(这个aspx同时也是静态页的模板),重新生成后再重定向到静态页,否则直接生成静态页的链接 当数据变更的同时更新标记用的字段

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网