Photoshop调色板jquery 调出调色板的颜色不对 怎么清除剪贴板里的灰度图???

20:45 提问
用C语言将bmp 8位灰度图的灰度值缩小16倍,调色板中数值由255行变成16行调
用C语言将bmp 8位灰度图的灰度值缩小16倍,由0-255变成0-16,调色板中数值由255行变成16行,同时调色板rgbBlue
rgbGreen数值范围由0-255变成0-1。我用c语言实现后,为什么图片不再是灰度图,有了其他颜色???
```#pragma once
#ifndef BMP_H_INCLUDED
#define BMP_H_INCLUDED
typedef unsigned short WORD;//2字节
typedef unsigned long DWORD;//4字节
typedef long LONG;
typedef unsigned char BYTE;
#define pi
/* 位图文件头结构 14字节 */
typedef struct tagBITMAPFILEHEADER
WORD bfT//位图文件类型,必须为BMP(0-1字节)
DWORD bfS//位图文件大小,以字节为单位(2-5字节)
WORD bfReserved1;//位图文件保留字,必须为0(6-7字节)
WORD bfReserved2;//位图文件保留字,必须为0(8-9字节)
DWORD bfOffB//位图数据的起始位置,以相对于位图文件头的偏移量表示(10-13字节)
}BITMAPFILEHEADER;
/* 位图信息头结构 40字节 */
typedef struct tagBITMAPINFOHEADER
DWORD biS // 本结构占得字节数(14-17字节),结构长度 40B
LONG biW//位图的宽度,以像素为单位(18-21字节)
LONG biH//位图的高度,以像素为单位(22-25字节)
WORD biP//颜色面板值必须为1(26-27字节)
WORD biBitC// 表示颜色要用到的位数,颜色位值可以是1(双色),(28-29字节)
//4(16色),8(256色),16(64K色,高彩色),24(16M,真彩色),32(4096M增强型真彩色)中的一个
DWORD biC// 压缩格式,必须是0(不压缩)(30-33字节)
//1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)或3(Bitfields,位域存放)
DWORD biSizeI// 位图的大小,位图占用字节数=biWidth(4的整倍数)*biHeight
LONG biXPelsPerM// 水平分辨率,每米像素数(38-41字节)
LONG biYPelsPerM// 垂直分辨率,每米像素数(42-45字节)
DWORD biClrU// 位图实际使用的颜色表中的颜色数,(46-49字节)
DWORD biClrI// 位图显示过程中重要的颜色数(50-53字节)
}BITMAPINFOHEADER;
/* 调色板 4字节 */
//颜色表中RGBQUAD结构数据的个数由biBitCount来确定
//颜色表中RGBQUAD结构数据的个数有biBitCount来确定:
// 当biBitCount=1,4,8时,分别有2,16,256个表项;????????????
// 当biBitCount=24时,没有颜色表项
typedef struct tagRGBQUAD
double rgbB//蓝色的亮度(值得范围0-255)
double rgbG//绿色的亮度
double rgbR//红色的亮度
double rgbR//保留,必须为0
//位图数据
//位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,
//扫描行之间是从下到上。位图的一个像素值所占的字节数:
/* 当biBitCount=1时,8个像素占1个字节;
  当biBitCount=4时,2个像素占1个字节;
  当biBitCount=8时,1个像素占1个字节;
  当biBitCount=24时,1个像素占3个字节;*/
//Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充,
/* 定义图像信息 */
typedef struct tagBITMAPINFO
BITMAPINFOHEADER bmiH//位图信息头
RGBQUAD bmiColors[1];//颜色表
}BITMAPINFO;
/* 定义位图图像 /
typedef struct _Bitmap
BITMAPFILEHEADER
BITMAPINFOHEADER
// 8 或者24
int imageS
// 图像数据大小(imageSize=height*widthStep)字节
BYTE imageD
//排列的图像数据,指向存储空间第一个单元的
int widthS
//排列的图像行大小,不够4的整数倍的就补0
位图创建函数
创建一个Bitmap结构,并为图像数据分配空间
使用方法:
Bitmap bmp=(Bitmap)malloc(sizeof(Bitmap));
ret=CreateBitmap(bmp,50,50,3);
int CreateBitmap(Bitmap bmp, int width, int height, int bitCount)
bmp-&width =
bmp-&height =
bmp-&bmih.biWidth =
bmp-&bmih.biHeight =
bmp-&widthStep = (int)((width*bitCount + 31) / 32) * 4; //可是为什么这样计算????????????
//eg:5*5的灰度图像,bitcount=8,则计算出来,widthstep=8,一行的像素个数不够4的倍数的补0
bmp-&imageSize = bmp-&height*bmp-&widthStep*sizeof(BYTE);//计算排列的图像大小sizeof(BYTE)=1
if (bitCount == 8)
bmp-&bitCount = 8;
bmp-&bmfh.bfType = 0x4d42;
//注意是4d42 这个地方折磨我一下午啊
bmp-&bmfh.bfReserved1 = 0;
bmp-&bmfh.bfReserved2 = 0;
bmp-&bmih.biBitCount = 8;
bmp-&bmih.biSize = 40;
bmp-&bmih.biPlanes = 1;
bmp-&bmfh.bfSize = 54 + 256 * 4 + height*bmp-&widthS
bmp-&bmfh.bfOffBits = 1078;
bmp-&bmih.biBitCount = 8;
bmp-&bmih.biCompression = 0;
bmp-&bmih.biSizeImage = bmp-&imageS
bmp-&bmih.biClrUsed = 0;
bmp-&bmih.biClrImportant = 0;
bmp-&bmih.biXPelsPerMeter = 0;
bmp-&bmih.biYPelsPerMeter = 0;
else if (bitCount == 24)
bmp-&bitCount = 24;
bmp-&bmfh.bfType = 0x4d42;
bmp-&bmih.biBitCount = 24;
bmp-&bmfh.bfReserved1 = 0;
bmp-&bmfh.bfReserved2 = 0;
bmp-&bmih.biSize = 40;
bmp-&bmih.biPlanes = 1;
bmp-&bmfh.bfSize = 54 + height*bmp-&widthS
bmp-&bmfh.bfOffBits = 54;
bmp-&bmih.biBitCount = 24;
bmp-&bmih.biSizeImage = bmp-&imageS
bmp-&bmih.biClrUsed = 0;
bmp-&bmih.biCompression = 0;
bmp-&bmih.biClrImportant = 0;
bmp-&bmih.biXPelsPerMeter = 0;
bmp-&bmih.biYPelsPerMeter = 0;
printf("Error(CreateBitmap): only supported 8 or 24 bits bitmap.\n");
return -1;
bmp-&imageData = (BYTE*)malloc(bmp-&imageSize);
//分配数据空间
if (!(bmp-&imageData))
printf("Error(CreateBitmap): can not allocate bitmap memory.\n");
return -1;
位图指针释放函数
释放位图数据空间
使用方法:
ReleaseBitmap(bmp);
void ReleaseBitmap(Bitmap bmp)
free(bmp-&imageData);
bmp-&imageData = NULL;
free(bmp);
bmp = NULL;
路径检查函数:是否为BMP文件,是否可读
正确返回0,错误返回-1
ret=CheckPath(path);
int CheckPath(char *path)
int len = strlen(path) / sizeof(char);
char ext[3];
//check whether the path include the characters "bmp" at end
strncpy(ext, &path[len - 3], 3);
if (!(ext[0] == 'b' && ext[1] == 'm' && ext[2] == 'p')) {
printf("Error(CheckPath): the extension of the file is not bmp.\n");
return -1;
//check whether the file can be read or not
fd = fopen(path, "r");
printf("Error(CheckPath): can not open the file.\n");
return -1;
fclose(fd);
void ShowImage(char * filepath)
char cmd[266];
strcpy(cmd, "start ");
strcat(cmd, filepath);
printf("%s\n", cmd);
system(cmd);
从文件中读取位图函数
正确返回0,错误返回-1
使用方法:
bmp=(Bitmap*)malloc(sizeof(Bitmap));
ret=ReadBitmap(path, bmp);
int ReadBitmap(char path, Bitmap* bmp)
//检查路径是否可读
ret = CheckPath(path);
if (ret == -1)
printf("Error(ReadRGBBitmap): the path of the image is invalid.\n");
return -1;
ShowImage(path);
//打开文件
fd = fopen(path, "rb");
if (fd == 0)
printf("Error(ReadRGBBitmap): can not open the image.\n");
return -1;
//读取文件信息头14字节
fread(&(bmp-&bmfh.bfType), sizeof(WORD), 1, fd);
fread(&(bmp-&bmfh.bfSize), sizeof(DWORD), 1, fd);
fread(&(bmp-&bmfh.bfReserved1), sizeof(WORD), 1, fd);
fread(&(bmp-&bmfh.bfReserved2), sizeof(WORD), 1, fd);
fread(&(bmp-&bmfh.bfOffBits), sizeof(DWORD), 1, fd);
//读取位图信息头40字节
fread(&(bmp-&bmih.biSize), sizeof(DWORD), 1, fd);
fread(&(bmp-&bmih.biWidth), sizeof(DWORD), 1, fd);
fread(&(bmp-&bmih.biHeight), sizeof(DWORD), 1, fd);
fread(&(bmp-&bmih.biPlanes), sizeof(WORD), 1, fd);
fread(&(bmp-&bmih.biBitCount), sizeof(WORD), 1, fd);
fread(&(bmp-&bmih.biCompression), sizeof(DWORD), 1, fd);
fread(&(bmp-&bmih.biSizeImage), sizeof(DWORD), 1, fd);
fread(&(bmp-&bmih.biXPelsPerMeter), sizeof(DWORD), 1, fd);
fread(&(bmp-&bmih.biYPelsPerMeter), sizeof(DWORD), 1, fd);
fread(&(bmp-&bmih.biClrUsed), sizeof(DWORD), 1, fd);
fread(&(bmp-&bmih.biClrImportant), sizeof(DWORD), 1, fd);
//创建位图结构
ret = CreateBitmap(bmp, bmp-&bmih.biWidth, bmp-&bmih.biHeight, bmp-&bmih.biBitCount);
if (ret == -1)
printf("Error(CreateBitmap): can not CreateBitmap.\n");
return -1;
//读取图像数据
//由于4字节对齐格式
fseek(fd, bmp-&bmfh.bfOffBits, SEEK_SET);
//定位到图像数据区
ret = fread(bmp-&imageData, bmp-&imageSize, 1, fd);
if (ret == 0)
if (feof(fd))
//if the file pointer point to the end of the file
if (ferror(fd))
//if error happened while read the pixel data
printf("Error(ReadBitmap): can not read the pixel data.\n");
fclose(fd);
return -1;
//关闭文件
fclose(fd);
保存位图到文件中去
正确返回0,错误返回-1
使用方法:
bmp=(Bitmap*)malloc(sizeof(Bitmap));
ret=SaveBitmap(path, bmp);
int SaveBitmap(char path, Bitmap* bmp, RGBQUAD *map = 0)
int ret = 0;
//检查路径是否正确
int len = strlen(path) / sizeof(char);
char ext[3];
//check whether the path include the characters "bmp" at end
strncpy(ext, &path[len - 3], 3);
if (!(ext[0] == 'b' && ext[1] == 'm' && ext[2] == 'p'))
printf("Error(SaveBitmap): the extension of the file is not bmp.\n");
return -1;
//打开文件
fd = fopen(path, "wb");
if (fd == 0)
printf("Error(SaveBitmap): can not open the image.\n");
return -1;
//保存文件信息头
fwrite(&(bmp-&bmfh.bfType), sizeof(WORD), 1, fd);
fwrite(&(bmp-&bmfh.bfSize), sizeof(DWORD), 1, fd);
fwrite(&(bmp-&bmfh.bfReserved1), sizeof(WORD), 1, fd);
fwrite(&(bmp-&bmfh.bfReserved2), sizeof(WORD), 1, fd);
fwrite(&(bmp-&bmfh.bfOffBits), sizeof(DWORD), 1, fd);
//保存位图信息头
fwrite(&(bmp-&bmih.biSize), sizeof(DWORD), 1, fd);
fwrite(&(bmp-&bmih.biWidth), sizeof(DWORD), 1, fd);
fwrite(&(bmp-&bmih.biHeight), sizeof(DWORD), 1, fd);
fwrite(&(bmp-&bmih.biPlanes), sizeof(WORD), 1, fd);
fwrite(&(bmp-&bmih.biBitCount), sizeof(WORD), 1, fd);
fwrite(&(bmp-&bmih.biCompression), sizeof(DWORD), 1, fd);
fwrite(&(bmp-&bmih.biSizeImage), sizeof(DWORD), 1, fd);
fwrite(&(bmp-&bmih.biXPelsPerMeter), sizeof(DWORD), 1, fd);
fwrite(&(bmp-&bmih.biYPelsPerMeter), sizeof(DWORD), 1, fd);
fwrite(&(bmp-&bmih.biClrUsed), sizeof(DWORD), 1, fd);
fwrite(&(bmp-&bmih.biClrImportant), sizeof(DWORD), 1, fd);
//保存颜色表
if (bmp-&bmih.biBitCount == 8)
ret = fwrite(map, sizeof(RGBQUAD) , 256, fd);
if (ret == -1)
printf("Error(SaveBitmap): can not save Color Palette.\n");
return -1;
//保存图像数据
ret = fwrite(bmp-&imageData, bmp-&imageSize, 1, fd);
if (ret != 1)
printf("Error(SaveBitmap): can not save the pixel data.\n");
return -1;
//关闭文件
fclose(fd);
int gray2ind(Bitmap* src, RGBQUAD map, Bitmap dst)
CreateBitmap(dst, src-&width, src-&height, 8);
//灰度数据缩放
for (int i = 0; i&dst-& i++)
for (int j = 0; j&dst-& j++)
r = *(src-&imageData + src-&widthStep*(src-&height - 1 - i) + j);
m = r / 16;
*(dst-&imageData + dst-&widthStep*(dst-&height - 1 - i) + j) =
for (int i = 0; i&16; ++i)
//调色板转换为0-1的小数
double gray = 0;
gray = i*0.0667;
(map + i)-&rgbBlue =
(map + i)-&rgbRed =
(map + i)-&rgbGreen =
(map + i)-&rgbReserved = 0;
#endif // BMP_H_INCLUDED
按赞数排序
问题是,调色板 r
b三值相等啊,还有怎么会变三通道呢
是不是图片变成三通道的了。
可能是你把数据缩小后,合并移位了,可以把值打印出来看看,或者单步调试下看看
347关注|289收录
49关注|57收录
451关注|2544收录
其他相似问题
相关参考资料[切换科目]
以下试题来自:
单项选择题在CorelDRAWX4中,(
)是一种8位灰度位图模式,主要用于产生带有一定颜色的灰度图像。A.双色模式B.RGB模式C.调色板模式D.都不正确
为您推荐的考试题库
你可能感兴趣的试题
1A.“增强”视图模式B.“简单线框”视图模式C.“线框”视图模式D.“草稿”视图模式2A.纯色B.位图C.无背景D.矢量图3A.用于确定绘图中对象大小和位置的水平和垂直边框B.在绘图窗口中显示的矩形区域C.显示鼠标的当前位置D.帮助您在绘图上进行移动操作。4A.模糊B.艺术笔触C.三锥效果D.都不正确5A.色阶调整B.曲线调整C.色彩平衡D.都正确
热门相关试卷
最新相关试卷 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
VC编程实现灰度图像与彩色图像的相互转换PhotoShop的图像处理功能很强,其中有一个功能.
下载积分:900
内容提示:VC编程实现灰度图像与彩色图像的相互转换PhotoShop的图像处理功能很强,其中有一个功能是将灰度图像转换为彩色图像,数字图像处理中,也经常要遇到灰度
文档格式:DOC|
浏览次数:19|
上传日期: 21:30:43|
文档星级:
该用户还上传了这些文档
VC编程实现灰度图像与彩色图像的相互转换PhotoShop的
官方公共微信颜色伴侣 - 分析仪及转换:在 App Store 上的内容
正在打开 iTunes Store。如果 iTunes 不自动打开,在 Dock 或 Windows 桌面上点击 iTunes 图标。进度指示器
正在打开 iBooks Store。如果 iBooks 未打开,请在 Dock 中打开 iBooks App。进度指示器
如要轻松整理及新增数码媒体收藏,iTunes 是全世界最简单的工具。
我们在您的电脑上找不到 iTunes。 要购买和下载Digital Media Interactive LLC的颜色伴侣 - 分析仪及转换,请立即获取 iTunes。
已经有 iTunes 了? 现在点击「我有 iTunes」以打开 iTunes。
颜色伴侣 - 分析仪及转换
开发商:Digital Media Interactive LLC
打开 iTunes 以购买和下载 App。
★★☆★★☆★★☆★★☆★★☆★★☆★★☆★★最多才多艺的色彩分析仪及转换!★★☆★★☆★★☆★★☆★★☆★★☆★★☆★★工作一个新的设计项目,并需要精确的色彩设计和分析?扔掉你拥有的每一个其他颜色的应用程序,更快的工作与颜色伴侣。热门产品特点:?分析颜色?转换颜色值?自动创建调色板从图片/网站?建立,编辑及分享调色板/颜色?混合和创建的颜色变化?50股票调色板分析任何颜色从:?颜色和灰度色轮?照片相册照片?用相机摄?网页存储在自定义调色板的颜色,您可以通过电子邮件,复制到剪贴板,或者保存供以后使用。颜色同伴分析图像中的颜色上的任何地方,并为您提供详细的颜色信息,包括:?六角?RGB?实验室?HSB?CMYK调整与滑块实现较浅或较深的颜色,颠倒的图像,并转换成图像上飞灰度图像的画布。自动创建完整的调色板,从照片和网站。调整的色彩保真度,以提取更多/更少的颜色。创建自己的调色板,或使用任何包括的50个股票调色板。编辑颜色与RGB,实验室,HSB,和CMYK滑块创建的颜色变化。执行颜色添加剂灯和减法的油漆混合和创建颜色的补充(30,-30,120,-120,150,-150度色调)。无论你是存储专业设计师与客户沟通,打印店员工工作在一个自定义命令或只是停留在改善住房的人试图找出正确的颜色为您的新厨房墙面,颜色同伴准备去!有什么其他的说这★★★★★应用程序:★谈论一个现实的生产力应用程序。这个应用程序救了我小时的时间,当我坐在我的最后一个客户端。★我喜欢,我怎么能抢的颜色代码,任何网站或照片的一部分。到Photoshop的大恭维!★只要我一直在寻找我的最新项目,以帮助我!★开发商都非常敏感,并添加一个功能,我在未来的更新要求。因此,真棒!绝对推荐。 5颗星。★哇!救了我soooo很多时间在我的网页设计★我爱全屏幕彩色预览,可以帮助我房子周围物体的颜色进行比较。★我的下一个油漆工作将是一件轻而易举的!!没有更多的担心颜色一起去。我已经得到整个调色板蓄势待发。非常感谢!
版本 5.01 中的新功能
Bug fixes for iOS 7Improved Analyzing Speed
希望支持中文
希望早点支持中文版
Very good!
Very usefull
用户购买的还有
此 App 专为 iPhone 和 iPad 设计?12.00类别: 版本: 5.01大小: 22.6 MB语言: 英语开发商: Digital Media Interactive LLC兼容性: 需要 iOS 5.0 或更高版本。与 iPhone、iPad 和 iPod touch 兼容。
4.85714&&&&&7 份评分
&&&&&21 份评分
更多Digital Media Interactive LLC的产品}

我要回帖

更多关于 cdr如何调出调色板 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信