如何将16位和24位的图片转换成256色的图片。

hx 2001-11-22 10:05:06
各位帮看了。
...全文
641 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
hx 2001-12-14
  • 打赏
  • 举报
回复
大家,真是对不起,
一直没来,
所以让大家久等了
xokx 2001-12-07
  • 打赏
  • 举报
回复
那位大师能告诉我16位图象的具体结构,以及经典的转256色灰度图的算法?
主  题:16位位图图象的结构是什么样的?
作  者:xokx
所属论坛:Visual C++
chskim 2001-11-27
  • 打赏
  • 举报
回复
: hx(QQ我是皮蛋):给你发了代码,你怎么不加分呢? 太失信了. 
hx 2001-11-24
  • 打赏
  • 举报
回复
谢谢大家,机器坏了,:(
不能收信,很多东西,都不能用了。。。。没有防火的,真烦。
前面的大哥,说说算法了,代码我自己写了,(给代码,我再给分了)
Roy123 2001-11-23
  • 打赏
  • 举报
回复
我刚做了24位转256色的程序,颜色量化采用了最简单的算法,效果不大好,要的话,我发给你。
chskim 2001-11-23
  • 打赏
  • 举报
回复
hx(QQ我是皮蛋): 原码我可是发给你了,你可不要食言阿
JerryGR 2001-11-23
  • 打赏
  • 举报
回复
有很多种办法!
但只记得一种了,但你要看些数学书!
在多元统计分析中,有一种叫主成分分析的内容,正好可以用来解决你的问题:
16位或者24位图像的信息是很大的,256色图像只能是上述图像的主成分,我想你通过书上
的内容,能够解决图像的转换的!
自己努力吧!:)
lanzhengpeng2 2001-11-23
  • 打赏
  • 举报
回复
楼上的,调色板对吗?
关键在于减色得到最好的调色板,其他的,用脚指头就够了
dongfa 2001-11-23
  • 打赏
  • 举报
回复
GetDIBits(),有现在的函数可以用的,这是我原来做过一个函数,nBits可以指定颜色数目,只是一个函数:
HDIB WINAPI PL_BmpToDIB(HBITMAP hBitmap, HPALETTE hPal, int nBits)
{
BITMAP bm;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
DWORD dwLen;
HANDLE hDIB, h;
HDC hDC;
WORD biBits;

if(!hBitmap)
return NULL;

if(!GetObject(hBitmap, sizeof(bm), (LPSTR)&bm))
return NULL;
if (hPal == NULL)
hPal = (HPALETTE) GetStockObject(DEFAULT_PALETTE);
biBits = bm.bmPlanes * bm.bmBitsPixel;
if (biBits <= 1)
biBits = 1;
else if (biBits <= 4)
biBits = 4;
else if (biBits <= 8)
biBits = 8;
else
biBits = 24;
if(nBits != -1)
{
if(nBits == 1 || nBits == 4 || nBits == 8 || nBits == 24)
{
biBits = nBits;
}
}
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bm.bmWidth;
bi.biHeight = bm.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = biBits;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
dwLen = bi.biSize + PL_PaletteSize((LPBYTE)&bi);

hDC = GetDC(NULL);
hPal = SelectPalette(hDC, hPal, FALSE);
RealizePalette(hDC);
hDIB = GlobalAlloc(GHND, dwLen);
if (!hDIB)
{
SelectPalette(hDC, hPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);
return NULL;
}
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
*lpbi = bi;
GetDIBits(hDC, hBitmap, 0, (UINT)bi.biHeight, NULL, (LPBITMAPINFO)lpbi,
DIB_RGB_COLORS);
bi = *lpbi;
GlobalUnlock(hDIB);

if (bi.biSizeImage == 0)
bi.biSizeImage = WIDTHBYTES((DWORD)bm.bmWidth * biBits) * bm.bmHeight;
dwLen = bi.biSize + PL_PaletteSize((LPBYTE)&bi) + bi.biSizeImage;

if (h = GlobalReAlloc(hDIB, dwLen, 0))
hDIB = h;
else
{
GlobalFree(hDIB);
hDIB = NULL;
SelectPalette(hDC, hPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);
return NULL;
}
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
if (GetDIBits(hDC, hBitmap, 0, (UINT)bi.biHeight, (LPSTR)lpbi +
(WORD)lpbi->biSize + PL_PaletteSize((LPBYTE)lpbi), (LPBITMAPINFO)lpbi,
DIB_RGB_COLORS) == 0)
{
GlobalUnlock(hDIB);
hDIB = NULL;
SelectPalette(hDC, hPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);
return NULL;
}

bi = *lpbi;
GlobalUnlock(hDIB);
SelectPalette(hDC, hPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);

return (HDIB) hDIB;
}

chskim 2001-11-22
  • 打赏
  • 举报
回复
你先给我50分,我就发给你,因为我答10个有时一个人都不给.
你上边的问题我已经解决了,我现在做16位变2色图像的处理
清泉ys 2001-11-22
  • 打赏
  • 举报
回复
对呀,要了解位图的结构
24位结构
16位结构
8位结构
然后 ,就该会了吧
Kevin_qing 2001-11-22
  • 打赏
  • 举报
回复
比较麻烦,关键是调色版色彩选择和适配算法,看看图形学书里面可能有
cdone 2001-11-22
  • 打赏
  • 举报
回复
g z
liujiangsh 2001-11-22
  • 打赏
  • 举报
回复
用“画图”打开,然后另存为256色的即可。
hx 2001-11-22
  • 打赏
  • 举报
回复
wgy@wz163.com
清泉ys 2001-11-22
  • 打赏
  • 举报
回复
算法自己设计啦,不太难
jason802 2001-11-22
  • 打赏
  • 举报
回复
那就把50分给大刀阔斧,另外的50分给我,我也给你发一个,你可以比较不同的方法。这样更能进步。呵呵

hx 2001-11-22
  • 打赏
  • 举报
回复
大刀兄,这五十分怎么给,给就是100,再看上面的这些仁兄,
16位到2色,我信,
但256,就不同了。
在CSDN里,说给分就给分,我还少有欠分的,除了没有解决
: ysdesigned(清泉) 
了解了位图,还要算法的。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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