资源简介
网上大部分的转换代码都没有考虑对齐问题,好不容易找到这个,没有问题。
但是在批量处理图片时,需要修改两个地方
int usedTimes[4096] = {0};//12b
int miniColor[4096];
要改new出来,并把usedTimes初始化
在Transfer函数的最后要delete []usedTimes和delete []miniColor,
不然的话,批量处理堆栈会溢出。
代码片段和文件信息
//原文出处:
//http://members.easyshag.com/femaledesperation/cg01.html
//http://members.easyshag.com/femaledesperation/gillian22.html#top
//问题:没考虑对齐!
/* 原理:
The usual approach is to create an array representing a histogram of colors
and color frequencies sort the array in order of descending frequencies
and copy the first 236 colors in the array to the palette.
To keep the array size manageable the least significant 3 or 4 bits of each 8-bit color
component are normally discarded. A popularity palette generally produces better output
than a halftone palette but infrequently appearing colors that are nonetheless important
to the eye may be omitted.*/
/***************
bmpTest.cpp
****************/
#include “Test.h“
// 计算平P方F差C的函数
int PFC(int color1 int color2)
{
int xyz;
x = (color1 & 0xf) - (color2 & 0xf);
y = ((color1>>4) & 0xf) - ((color2>>4) & 0xf);
z = ((color1>>8) & 0xf) - ((color2>>8) & 0xf);
return (x*x + y*y + z*z);
};
// 直接插入排序
int Sort1(int *src int *attach int n)
{
int cur cur1;
int ijk=0;
for (i = 1; i < n; i++)
{
cur= src[i];
cur1 = attach[i];
for (j = i - 1; j >= 0; j--)
{
if (cur > src[j])
{
src[j+1]= src[j];
attach[j+1] = attach[j];
}
else
{
break;
}
}
src[j+1]= cur;
attach[j+1] = cur1;
}
return 0;
}
// 快速排序
int Sort2(int *src int *attach int n)
{
if (n <= 12) return Sort1(src attach n);
int low = 1 high = n - 1;
int tmp;
while (low <= high)
{
while (src[low] >= src[0])
{
if (++low > (n - 1)) break;
}
while (src[high] < src[0])
{
if (--high < 1) break;
}
if (low > high) break;
//
tmp= src[low];
src[low]= src[high];
src[high]= tmp;
tmp= attach[low];
attach[low]= attach[high];
attach[high]= tmp;
low++;
high--;
}
//
tmp= src[low - 1];
src[low - 1]= src[0];
src[0]= tmp;
tmp= attach[low - 1];
attach[low - 1]= attach[0];
attach[0]= tmp;
//
if (low > 1) Sort2(src attach low - 1);
if (low < n) Sort2(&src[low] &attach[low] n - low);
//
return 0;
}
// 将 24 bit 的象素颜色数据转换为 256 色图的图像数据(即索引值)
int Transfer(WORD *shortColor int BytesPerRow int bmWidth int bmHeight BYTE *out8Dib RGBQUAD *mainColor)
{// BytesPerRow may not equel bmWidth !
int usedTimes[4096] = {0};//12b
int miniColor[4096];
int ij;
for (i = 0; i < 4096; i++) miniColor[i] = i;
//
for (i = 0; i < bmWidth*bmHeight; i++)
{
usedTimes[shortColor[i]] ++;// get frequency
}
int numberOfColors = 0;
for (i = 0; i < 4096; i++)
{
if (usedTimes[i] > 0) numberOfColors++;
}
// 对usedTimes进行排序,排序过程中minColor数组(保存了颜色值)也作与useTimes
// 数组相似的交换
Sort2(usedTimes miniColor 4096);
// usedTimes数组中是各颜色使用频率,从高到低排列,显然第numberOfColor个之后的都为0
// miniColor数组中是相应的颜色数据
// 将前256个颜色数据保存到256色位图的调色盘中
for (i = 0; i < 256; i++)
{
mainColor[i].rgbBlue= (BYTE)((miniColor[i]>>8)<<4);
mainColor[i].rgbGreen= (BYTE)(((miniColor[i]>>4) & 0xf)<<4);
mai
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8086 2016-11-23 12:26 真彩24位转256色\BMP_ReadWrite.cpp
文件 3548 2011-12-07 14:44 真彩24位转256色\BMP_ReadWrite.dsp
文件 551 2011-12-05 11:52 真彩24位转256色\BMP_ReadWrite.dsw
文件 58368 2016-11-23 14:30 真彩24位转256色\BMP_ReadWrite.ncb
文件 136704 2016-11-23 14:30 真彩24位转256色\BMP_ReadWrite.opt
文件 1412 2016-11-23 12:26 真彩24位转256色\BMP_ReadWrite.plg
文件 240 2016-11-23 14:30 真彩24位转256色\BMP_ReadWrite.positions
文件 1934336 2016-11-23 12:26 真彩24位转256色\Debug\BMP_ReadWrite.bsc
文件 176239 2016-11-23 12:26 真彩24位转256色\Debug\BMP_ReadWrite.exe
文件 207732 2016-11-23 12:26 真彩24位转256色\Debug\BMP_ReadWrite.ilk
文件 25533 2016-11-23 12:26 真彩24位转256色\Debug\BMP_ReadWrite.obj
I.A.... 4494808 2016-11-23 12:02 真彩24位转256色\Debug\BMP_ReadWrite.pch
文件 500736 2016-11-23 12:26 真彩24位转256色\Debug\BMP_ReadWrite.pdb
文件 0 2016-11-23 12:26 真彩24位转256色\Debug\BMP_ReadWrite.sbr
文件 132096 2016-11-23 12:26 真彩24位转256色\Debug\vc60.idb
文件 77824 2016-11-23 12:26 真彩24位转256色\Debug\vc60.pdb
文件 3630 2011-12-07 13:40 真彩24位转256色\test.h
文件 1582 2016-11-23 12:26 真彩24位转256色\testout.bmp
文件 10341 2011-12-14 11:18 真彩24位转256色\读写BMP示例.txt
目录 0 2016-11-23 12:26 真彩24位转256色\Debug
目录 0 2016-11-23 14:30 真彩24位转256色
----------- --------- ---------- ----- ----
7773766 21
相关资源
- MTCNN_face_detection_alignment.zip
- AUTOCAD线条文本对齐工具
- kinect彩色图像对齐到深度并显示结果
- multiPIE 人脸数据库1515张,含表情,光
- intraFace人脸对齐
- seetaface的人脸检测-人脸对齐-人脸识别
- 深度彩色图对齐
- LFW数据集-人脸对齐图片
- 22万句对法律类句子对齐语料
- DlibTest.7z
- N76E003单片机PWM程序边沿对齐,独立输
- lfw人脸数据集原图及人脸对齐图片
- 论文写作公式居中编号右对齐模板
- 数字图像处理+将24位真彩色BMP图像转
- 设置RichTextBox的文本对齐方式
- 分布式干扰对齐
- 干扰信道的干扰对齐算法综述
- IndentGuide For VS2010 缩进对齐插件
- 24to8Colors.zip
- table表格,让thead固定,tbody有滚动条
- 干扰对齐PPT
- Code Alignment
- 彩色图和深度图对齐用的配置文件
- pytorch实现人脸识别包括人脸检测(
-
MDK5使用Jli
nk调试时出现内存对齐方 - cad 标注对齐修剪工具,好用
- RGB332 8bpp 256色 颜色列表
评论
共有 条评论