灰度值转变为颜色值

treeminLin 2007-07-19 09:37:55
我知道每个像素点的灰度值是多少,请问我该怎么显示这幅图象!也就是说按照灰度值如何在屏幕上显示每个像素点
...全文
757 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengbao770 2012-06-20
  • 打赏
  • 举报
回复
int iWidth, iHeight, iBytesWidth,i,j;
iWidth = 16;
iHeight = 16;

float arry0[100][100],b[100][100];

FILE *fp;

fp=fopen("t1.txt","r");

for(i = 0; fscanf(fp, "%f", &b[i][0]) != EOF ; ++i)
{
for(j = 1; j < 16; ++j)
{
fscanf(fp, "%f", &b[i][j]);
}
}
fclose(fp);
float b1,b2;
b1=b[0][0];
b2=b[0][0];

for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
if(b[i][j]>b1)
b1=b[i][j];
}
}

for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
if(b[i][j]<b2)
b2=b[i][j];
}
}

for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
arry0[i][j]=(b[i][j]-b2)/(b1-b2);
}
}

CClientDC dc(this);

iBytesWidth=(iWidth*24+31)/32*4;
HANDLE hMem = GlobalAlloc(GMEM_MOVEABLE, iBytesWidth * iHeight);
BYTE *Image = (BYTE*)GlobalLock(hMem);
//memset(Image, 255, iBytesWidth * iHeight * 3);

for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
*(Image+i*iBytesWidth+j*3)=int(255*arry0[i][j]);
*(Image+1+i*iBytesWidth+j*3)=int(255*arry0[i][j]);
*(Image+2+i*iBytesWidth+j*3)=int(255*arry0[i][j]);

}
}

BITMAPINFO bmi;
ZeroMemory(&bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = iWidth;
bmi.bmiHeader.biHeight = iHeight;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = (iWidth*24+31)/32*4*iHeight;
::StretchDIBits(dc.GetSafeHdc(),100,100,128,128,0,0,16,16,Image,&bmi,DIB_RGB_COLORS,SRCCOPY);
GlobalUnlock(hMem);
GlobalFree(hMem);

t1.txt是数据文件
xdljf 2007-07-27
  • 打赏
  • 举报
回复
SetPixel
zhuzhu101011 2007-07-27
  • 打赏
  • 举报
回复
关于位图,还是直接在网上找现成的类比较方便
sandy_zc_1 2007-07-27
  • 打赏
  • 举报
回复
晕,RGBQUAD是标准的Win32 GDI结构体。

这种问题根本不用有劳什么第三方库。

不在意效率的话SetPixel()就可以。
按顺序把一个个象素全部输出到设备上就OK,象素的颜色就是RGB(灰度,灰度,灰度)

在意效率的话CreateDIBitmap(),CreateDIBSection(),SetDIBits()等等方法太多了。
lc2236 2007-07-24
  • 打赏
  • 举报
回复
1 创建8位位图
2 创建灰度调色版
3 把值写到图像查找表中[0~255]
4 draw
jhs1982419 2007-07-24
  • 打赏
  • 举报
回复
不用那么麻烦,可以直接利用第三方库,如开源的Freeimage库,可以网上下载,里面有许多图象处理的函数,什么创建调色版,图象格式转化等都不用考虑,直接调用里面的函数就可以了.
  至于你的问题,Freeimage 库里面定义了一个结构体变量RGBQUAD,可以这么用,在定义个对象,RGBQRAD c,然后r = c.rgbRed;g = c.rgbGreen;b = c.rgbBlue就OK了
treeminLin 2007-07-20
  • 打赏
  • 举报
回复
不懂
能否说得明白些
菜牛 2007-07-19
  • 打赏
  • 举报
回复
SetDIBitsToDevice

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧