社区
图形处理/算法
帖子详情
RGB图像转换到256、4096、65536色图像的代码?
YBYT2000
2002-12-05 10:38:19
各位大虾:
谁能提供RGB图像转换到256、4096、65536色图像的代码?需要VC的,如果能够用,一定给高分呀,拜托了!!!
...全文
393
10
打赏
收藏
RGB图像转换到256、4096、65536色图像的代码?
各位大虾: 谁能提供RGB图像转换到256、4096、65536色图像的代码?需要VC的,如果能够用,一定给高分呀,拜托了!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
clion
2002-12-11
打赏
举报
回复
半调和抖动,我有.那是做为商业产品设计的,付费可得.
pclion@163.com
zhenxizhou
2002-12-10
打赏
举报
回复
学习中
hcheng
2002-12-10
打赏
举报
回复
如果直接转换,图像质量可能不好,请问如何来做halftone呢?这里有人做过吗?
wwwqqq
2002-12-06
打赏
举报
回复
是不是用在DICOM上啊??
YBYT2000
2002-12-06
打赏
举报
回复
将16M颜色降低为256、4096或65536颜色。不一定是对文件的转换。
神农氏
2002-12-06
打赏
举报
回复
是bmp文件的转换吗
YBYT2000
2002-12-06
打赏
举报
回复
怎么都没人回复呢?郁闷中。。。。。。
用户 昵称
2002-12-06
打赏
举报
回复
//计算位图信息到位图数据间的偏移量(字节)
DWORD dwOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
//if(m_nBitCount == 8)
//if(pDoc->m_DIB.GetBitCount() ==8)
dwOffBits += (256 * sizeof(RGBQUAD));
m_pBMI->bmiHeader.biBitCount=8;//位图的每个象素的为数,1位对应的颜色总数为2,4--16,8--256,24--16777216
m_pBMI->bmiHeader.biClrImportant=0;//指定对于显示该位图比较重要的颜色索引个数,若值为0,则所有的颜色都是重要的。
m_pBMI->bmiHeader.biClrImportant=0;//位图实际使用的颜色数
m_pBMI->bmiHeader.biCompression=BI_RGB;//压宿方式
m_pBMI->bmiHeader.biClrUsed =0;
m_pBMI->bmiHeader.biHeight=nHeight;
m_pBMI->bmiHeader.biWidth=nWidth;
m_pBMI->bmiHeader.biPlanes=1;//表示目标设备的位平面数
m_pBMI->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
m_pBMI->bmiHeader.biXPelsPerMeter=0;//表示目标设备的水平分辨率
m_pBMI->bmiHeader.biYPelsPerMeter=0;//表示目标设备的垂直分辨率
m_pBMI->bmiHeader.biSizeImage =0;//nWidth*nHeight;
BITMAPFILEHEADER bmh;//位图文件头结构
LPBITMAPINFOHEADER lpBl;//指向位图信息结构的指针
RGBQUAD rgb[256];
DWORD dwDibSize;
lpBl=(LPBITMAPINFOHEADER)m_pBMI;
if(lpBl==NULL)
{
delete[] m_pBMI;
fclose(file);
return -2;
}
dwDibSize=*(LPDWORD)lpBl+256*sizeof(RGBQUAD)+sizeof(BITMAPFILEHEADER);
DWORD dwBmBitsSize;//BMP文件信息结构所占的字节数
dwBmBitsSize=dwSaveWidthBytes*nHeight;// lpBl->biWidth*lpBl->biHeight*4;//存储时位图所有象素所占
dwDibSize+=dwBmBitsSize;
lpBl->biSizeImage=dwBmBitsSize;//位图所有象素所占的字节总数
bmh.bfType=0x4d42;
bmh.bfSize=dwFileSize;//dwDibSize;//+sizeof(BITMAPFILEHEADER);//文件总长度
bmh.bfReserved1=0;
bmh.bfReserved2=0;
bmh.bfOffBits=dwOffBits;//sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); ;//(DWORD)sizeof(BITMAPFILEHEADER)+lpBl->biSize +256*sizeof(RGBQUAD);//
//palette
for(int i=0;i<256;i++)
{
rgb[i].rgbBlue=i;
rgb[i].rgbGreen=i;
rgb[i].rgbRed=i;
rgb[i].rgbReserved =0;
}
LPBYTE lpNew;//,lp1;//,lp2,
lpNew=(LPBYTE)malloc((long)nWidth*nHeight);
for (i=0;i<nHeight;i++)
for (j=0;j<nWidth;j++)
{
*(lpNew+(long)i*nWidth+j)=*(m_bTmpSrcImg+(long)i*nScanLine+j*4);
}
fwrite((LPSTR)&bmh, sizeof(BITMAPFILEHEADER), 1, file);//文件头
fwrite(lpBl,sizeof(BITMAPINFOHEADER), 1, file);//信息头
fwrite(rgb,sizeof(RGBQUAD)*256,1,file);//RGB
fwrite(lpNew,(long)nHeight*nWidth, 1, file);//数据
fclose(file);
delete[] m_pBMI;
free(lpNew);
break;
}
}
return 1;
}
用户 昵称
2002-12-06
打赏
举报
回复
BITMAPFILEHEADER bmh;//位图文件头结构
LPBITMAPINFOHEADER lpBl;//指向位图信息结构的指针
RGBQUAD rgb[256];
DWORD dwDibSize;
lpBl=(LPBITMAPINFOHEADER)m_pBMI;
if(lpBl==NULL)
{
delete[] m_pBMI;
fclose(file);
return -2;
}
dwDibSize=*(LPDWORD)lpBl+256*sizeof(RGBQUAD)+sizeof(BITMAPFILEHEADER);
DWORD dwBmBitsSize;//BMP文件信息结构所占的字节数
dwBmBitsSize=nScanLine*nHeight;// lpBl->biWidth*lpBl->biHeight*4;//存储时位图所有象素所占的字节数
dwDibSize+=dwBmBitsSize;
lpBl->biSizeImage=dwBmBitsSize;//位图所有象素所占的字节总数
//填充BITMAPFILEHEADER结构
bmh.bfType=0x4d42;
bmh.bfSize=dwFileSize;//+sizeof(BITMAPFILEHEADER);//文件总长度
bmh.bfReserved1=0;
bmh.bfReserved2=0;
bmh.bfOffBits=dwOffBits;//(DWORD)sizeof(BITMAPFILEHEADER)+lpBl->biSize +256*sizeof(RGBQUAD);//
//填充BITMAPINFOHEADER结构:8位仍然保存为8位, 其它均被保存为24位.最低显示模式为8位.
long dbWidth;
dbWidth=((nWidth * 32 + 15) / 16) * 2;
//palette
for(i=0;i<256;i++)
{
rgb[i].rgbBlue=i;
rgb[i].rgbGreen=i;
rgb[i].rgbRed=i;
rgb[i].rgbReserved =0;
}
//对于16位和32位位图, 由于数据需要重组, 所以需要重新分配内存
//指向Dib实际像素数据的指针,
BYTE* pbyDibBits = new BYTE[dwDibBitsSize];
if (pbyDibBits == NULL) return -1;
//数据索引基数
DWORD dwBaseIndex =0;// y * m_nDdbWidthBytes + ((m_nBitCount == 16) ? (x + x) : (4 * x));
DWORD dwIndexDib = (nHeight - 1) * dwSaveWidthBytes;
for(i=0;i<nHeight;i++)
{
//指向Ddb内存数据的指针(行)
BYTE* pbyDdbData = m_bTmpSrcImg + dwBaseIndex;
//指向Dib内存数据的指针(行)
BYTE* pbyDibData = pbyDibBits + dwIndexDib;
for(j=0;j<nWidth;j++)
{
*pbyDibData++ = *pbyDdbData++; //蓝色
*pbyDibData++ = *pbyDdbData++; //绿色
*pbyDibData++ = *pbyDdbData++; //红色
pbyDdbData++;
}
dwBaseIndex += dbWidth;
dwIndexDib -= dwSaveWidthBytes;
}
fwrite((LPSTR)&bmh, sizeof(BITMAPFILEHEADER), 1, file);//文件头
fwrite(lpBl,sizeof(BITMAPINFOHEADER), 1, file);//信息头
//fwrite(rgb,sizeof(RGBQUAD)*256,1,file);//RGB
fwrite(pbyDibBits,(long)dwDibBitsSize, 1, file);//数据
fclose(file);
delete[] pbyDibBits;
delete[] m_pBMI;
break;
}
case 2://gray
{
int j,nScanLine;
nScanLine=nWidth*4;
if(nScanLine & 3)
nScanLine=(nScanLine &~3) +4 ;
//被保存位图每行的字节数
DWORD dwSaveWidthBytes ;//= CalcDibWidthBytes(w, m_nBitCount);
//每行字节数必须被4整除
//if(pDoc->m_DIB.GetBitCount() ==8)
// dwSaveWidthBytes=((nWidth * 8 + 31) / 32) * 4;
//else
// dwSaveWidthBytes=((nWidth * 24 + 31) / 32) * 4;
dwSaveWidthBytes=((nWidth * 8 + 31) / 32) * 4;
//DIB位图数据大小, 以字节为单位
DWORD dwDibBitsSize = dwSaveWidthBytes * nHeight;
//计算整个Dib文件的大小dwFileSize
DWORD dwFileSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwDibBitsSize;
//if(pDoc->m_DIB.GetBitCount() == 8)
dwFileSize += (256 * sizeof(RGBQUAD));
用户 昵称
2002-12-06
打赏
举报
回复
/*
//功能如下:
1. 8位位图仍然保存为8位位图
2. 16位位图将被保存为24位位图.16位位图只用于16位增强显示模式, 不在不同的系统间进行传递.
3. 24位位图仍然被保存为24位位图.
4. 32位Ddb位图将被保存为24位位图.
5. 对于16色即4位位图, 不作处理.
*/
//将Ddb位图保存成Dib位图:被保存的区域由, x, y, nWidth, nHeight来定义
int CDisplayModeView::SaveBmp(char *lpFilePath,int nWidth,int nHeight,int nType)
{
CDisplayModeDoc* pDoc = GetDocument();
CDisplayModeApp *app=(CDisplayModeApp *)AfxGetApp();
ASSERT_VALID(pDoc);
if(m_nCountMathod<0)
return 0;
int i,j,nScanLine;
m_pBMI=new BITMAPINFO;
FILE *file = NULL;
file = fopen(lpFilePath, "wb");
if(file==NULL)
{
fclose(file);
delete []m_pBMI;
return -1;
}
if(m_bTmpSrcImg==NULL)
{
fclose(file);
delete []m_pBMI;
return -1;
}
switch(nType)
{
case 1://color
{
nScanLine=nWidth*4;
if(nScanLine & 3)
nScanLine=(nScanLine &~3) +4 ;
DWORD dwSaveWidthBytes ;//= CalcDibWidthBytes(w, m_nBitCount);
//每行字节数必须被4整除
if(pDoc->m_DIB.GetBitCount() ==8)
// dwSaveWidthBytes=((nWidth * 8 + 31) / 32) * 4;
dwSaveWidthBytes=((nWidth * 24 + 31) / 32) * 4;
else
dwSaveWidthBytes=((nWidth * 24 + 31) / 32) * 4;
//DIB位图数据大小, 以字节为单位
DWORD dwDibBitsSize = dwSaveWidthBytes * nHeight;
//计算整个Dib文件的大小dwFileSize
DWORD dwFileSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwDibBitsSize;
if(pDoc->m_DIB.GetBitCount() == 8) dwFileSize += (256 * sizeof(RGBQUAD));
//计算位图信息到位图数据间的偏移量(字节)
DWORD dwOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
//if(m_nBitCount == 8)
// if(pDoc->m_DIB.GetBitCount() ==8)
// dwOffBits += (256 * sizeof(RGBQUAD));
m_pBMI->bmiHeader.biBitCount=24;//位图的每个象素的为数,1位对应的颜色总数为2,4--16,8--256,24--16777216
m_pBMI->bmiHeader.biClrImportant=0;//指定对于显示该位图比较重要的颜色索引个数,若值为0,则所有的颜色都是重要的。
m_pBMI->bmiHeader.biClrImportant=0;//位图实际使用的颜色数
m_pBMI->bmiHeader.biCompression=0;//压宿方式
m_pBMI->bmiHeader.biClrUsed =0;
m_pBMI->bmiHeader.biHeight=nHeight;
m_pBMI->bmiHeader.biWidth=nWidth;
m_pBMI->bmiHeader.biPlanes=1;//表示目标设备的位平面数
m_pBMI->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
m_pBMI->bmiHeader.biXPelsPerMeter=0;//表示目标设备的水平分辨率
m_pBMI->bmiHeader.biYPelsPerMeter=0;//表示目标设备的垂直分辨率
m_pBMI->bmiHeader.biSizeImage =0;//nWidth*nHeight*4;
海思平台ISP与
图像
的IQ调试-第9季
到H.264编解码、RTSP流媒体传输、MP4文件打包,到
图像
IQ调试、
图像
识别等视频领域高阶内容,可以说从零基础入手,对
图像
采集、编解码、网络传输、
图像
存储和识别做了全方位的详细讲解和
代码
分析,是目前市面上**一套...
将
RGB
图像
转换
为索引
图像
[X,cmap] =
rgb
2ind(
RGB
,Q) [X,cmap] =
rgb
2ind(
RGB
,tol) X =
rgb
2ind(
RGB
,inmap) ___ =
rgb
2ind(___,dithering) 说明: [X,cmap] =
rgb
2ind(
RGB
,Q) 使用具有 Q 种量化颜
色
的最小方差量化法并加入抖动,将
RGB
图像
转换
为索引
图像
X,关联颜
色
图为 cmap。 [...
RGB
图像
,索引
图像
,灰度
图像
,二值
图像
相互
转换
#小白从零开始学习
图像
处理 1.将
RGB
图像
转换
为灰度
图像
close all clear all clc
RGB
=imread(‘haixiquan.jpg’); %读取
RGB
图像
gray=
rgb
2gray(
RGB
); %将
RGB
图像
转换
为灰度
图像
figure; set(0,‘defaultFigurePosition’,[100,100,1000,500]);%设置显示
图像
的窗口大小 set(0,‘defaultFigureColor’,[1 0 0]);%设置显示的背景颜
RGB
图像
转换
为灰度
图像
的原理
RGB
彩
色
图像
中,一种彩
色
由R(红
色
),G(绿
色
),B(蓝
色
)三原
色
按比例混合而成。
图像
的基本单元是一个像素,一个像素需要3块表示,分别代表R,G,B,如果8为表示一个颜
色
,就由0-255区分不同亮度的某种原
色
。 灰度
图像
是用不同饱和度的黑
色
来表示每个
图像
点,比如用8位 0-255数字表示“灰
色
”程度,每个像素点只需要一个灰度值,8位即可,这样一个3...
基于python的
图像
格式
转换
(将
RGB
图像
转换
为灰度
图像
)
1.将
RGB
图像
转换
为灰度
图像
: from PIL import Image I = Image.open('F:\\pycharm\\picture_format\\data\\lena.jpg') I.show() L = I.convert('L') L.show() 输出
图像
结果图为: 2.将
RGB
图像
转换
为1模式
图像
: from PIL import Imag
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章