‘壹’ 用C语言怎么将一张BMP格式的图片识别并改变颜色
你说用c语言是说直接用c的语法但是不用API吗? 如果是的话你需要对BMP格式进行剖析 分析BMP的格式,这个我没有办法 但是用Windows API的话我可以给点思路你.
LoadBitmap //获取图片文件句柄
GetObject //传入一个BITMAP结构 获取位图的信息 比如:长宽高
GetBitmapBits//获取像素点
//对保存像素点缓冲区进行修改
SetBitmapBits //修改像素
‘贰’ 怎样用C语言实现图片的RGB颜色空间向Lab颜色空间的转化
应该是HTML中的JAVASCRIPT代码,也可能是其他的用处很多,有时JAVASCRIPT中滤镜还要用!
颜色代码有以下几种表示方法:
HSB色系:利用的是人的视觉而产生的不同影响,用色值H,饱和度S,亮度B表示.
Lab色系,这是一种将自然界中所有颜色的转化,有些人眼是无法分辨的,这是各色系中色域最广的一个!用的时候不多.
RGB色系:这个是利用广告学中的三原色原理,纯色系,它认为各种颜色都是由R红G绿和B蓝来以不同比例混合(相加)而成.正如上文中的一个,使用24真彩色时每个最大值是255,最小是0,最后的一个数字,可能是滤镜要用到的滤色什么的,不见全部的东西是不知道的!同时还有另一种表示方法:6位16进制值:如FFFFFF一般前还要加个#号,前两位是红中间两位是绿最后两位是蓝.可以与数字相互转化.最常用的.
CMYK色系:由于广告中的印刷而产生的一种色系,也是混合,但是是减法色系.三原色是品红M,黄Y,青C,因为三色最终混合不能得到黑色,所以加入一个K黑色.这个用于印刷设计.色域没有RGB大.同时还是两个RGB三原色的混合(理论上),其中三原色都不复色,所以是减色系.表示方式是以%值表示,最大是100%.
WEB色系:是RGB的一个子色系(色域),当然色域最小.用以网页等设计,只能表示256种颜色,表示方法与RGB同.但是是按比例缩小色域,如RGB(0,0,0)就是WEB色能表示的,RGB(3,0,0)也是能表示的;但RGB(2,0,0)在WEB中就是RGB(3,0,0);换句话来说,不是RGB色系的一部分.
这没有专门的网站的,要多看一下书,一般平设开始会介绍一部分的相关知识的.
‘叁’ C# 关于RGB图像分量提取问题
Bitmapa=newBitmap("D:\s.png");//图片名字
for(inti=0;i<a.Width;i++){
for(intj=0;j<a.Height;j++){
varc=a.GetPixel(i,j);
if(c.R==c.G&&c.R==c.B){
//灰阶
}
else{
}
}
}你指的相加是加什么,RGB相加,还是颜色间相加?
‘肆’ 如何用c++编程实现提取给定图像中任意一点的RGB颜色值
控制台 读取BMP图片文件 输出指定点的颜色分量
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
long biWidth;
long biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
int ReadBmp(const char* szFileName);
int GetDIBColor(int X, int Y, BYTE *r, BYTE *g, BYTE *b);
BITMAPINFOHEADER bih;
BYTE *Buffer = NULL;
long LineByteWidth;
int main(void)
{
int x, y;
BYTE r, g, b;
int n;
char szfilename[255] = "c:\\1.bmp";
if (ReadBmp(szfilename) == 0)
{
printf("failure to read file %s", szfilename);
return 1;
}
printf("Width: %ld\n", bih.biWidth);
printf("Height: %ld\n", bih.biHeight);
printf("BitCount: %d\n\n", (int)bih.biBitCount);
while(1)
{
printf("input the X:");
scanf("%d", &x);
if (x < 0)
break;
printf("input the Y:");
scanf("%d", &y);
if (GetDIBColor(x, y, &r, &g, &b) == 1)
printf("(%d, %d): r:%d, g:%d, b:%d\n", x, y, (int)r, (int)g, (int)b);
else
printf("input error.\n");
}
free(Buffer);
return 0;
}
int ReadBmp(const char* szFileName)
{
FILE *file;
WORD bfh[7];
long dpixeladd;
if (NULL == (file = fopen(szFileName, "rb")))
{
return 0;
}
printf("%s\n", szFileName);
fread(&bfh, sizeof(WORD), 7, file);
if (bfh[0] != (WORD)(((WORD)'B')|('M'<<8)))
{
fclose(file);
return 0;
}
fread(&bih, sizeof(BITMAPINFOHEADER), 1, file);
if (bih.biBitCount < 24)
{
fclose(file);
return 0;
}
dpixeladd = bih.biBitCount / 8;
LineByteWidth = bih.biWidth * (dpixeladd);
if ((LineByteWidth % 4) != 0)
LineByteWidth += 4 - (LineByteWidth % 4);
if ((Buffer = (BYTE*)malloc(sizeof(BYTE)* LineByteWidth * bih.biHeight)) != NULL)
{
fread(Buffer, LineByteWidth * bih.biHeight, 1, file);
fclose(file);
return 1;
}
fclose(file);
return 0;
}
int GetDIBColor(int X, int Y, BYTE *r, BYTE *g, BYTE *b)
{
int dpixeladd;
BYTE *ptr;
if (X < 0 || X >= bih.biWidth || Y < 0 || Y >= bih.biHeight)
{
return 0;
}
dpixeladd = bih.biBitCount / 8;
ptr = Buffer + X * dpixeladd + (bih.biHeight - 1 - Y) * LineByteWidth;
*b = *ptr;
*g = *(ptr + 1);
*r = *(ptr + 2);
return 1;
}
‘伍’ C语言图形模式下获取某个像素的颜色值的函数是哪个
GetPixel
http://ke..com/link?url=h-cGow92aEgBbEWE_kmHQbpj-6u1KmiBUwdMsUjLEraYF-
‘陆’ 用C#做一个能够提取图像颜色值的程序
可以的,见下面代码
Bitmap btp = PictureBox1.Image;
Color c = btp.GetPixel(x, y);
C.R就是(x,y)坐标位置RGB的R值
C.G就是(x,y)坐标位置RGB的G值
.....................
‘柒’ 我有个c#问题,你能帮我吗 我想获取一个图片的尺寸(cm)和颜色模式(rgb或cmyk)
你看看下面的代码是不是你需要的

‘捌’ 用C判断BMP图片颜色的代码修改
bmp文件有1,4,16,24位等很多种表示一个像素的格式,按LZ给的代码的意思是只处理24位,没有压缩的情况,这样的话for循环三次每次次读到的是一个像素的BGR值.
我理解的意思是你要读出图片中间的一个纯色的正方形的图形的颜色,其他区域是白色。这样的话把for循环那里改一下
unsigned char temp[3];
int i,j;
for( i = 0; i < xsize * ysize; i++ )
{
for( j = 0; j < 3; j++ )
{
temp[j] = *image;
image++;
}
if( temp[0] == 0 && temp[1] == 0 )
{
printf("red\n");
break;
}
else if( temp[0] == 0 && temp[2] == 0 )
{
printf("green\n");
break;
}
else if( temp[1] == 0 && temp[2] == 0 )
{
printf("blue\n");
break;
}
}
我顺手写的,没有测试,如果有问题,把要测试的图片发来我测试一下。
另外,图片的大小最好动态获取,否则容易出错。
‘玖’ unity中利用Texture2D获取图片像素颜色应用于模型的脚本
Texture2D t2d = (Texture2D)Resources.Load("path");//读图片资源
Color c = t2d.GetPixel(x,y);//获取图片xy坐标处的颜色
gameObject.renderer.material.SetColor("_color",c);//应用颜色到shader的property
‘拾’ C语言 获取一点颜色
color=getpixel(100,200);
