社区
C++ 语言
帖子详情
图像的压缩与解压过程???
fxyuer2004
2005-09-08 09:10:28
有谁会用C或则用C++编写图像的压缩与解压过程的程序啊!!??? 帮忙啊,有60分加啊,有会的英雄吗??,你会吗?动手吧!不要犹豫! 你行的!
...全文
454
13
打赏
收藏
图像的压缩与解压过程???
有谁会用C或则用C++编写图像的压缩与解压过程的程序啊!!??? 帮忙啊,有60分加啊,有会的英雄吗??,你会吗?动手吧!不要犹豫! 你行的!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fxyuer2004
2005-09-24
打赏
举报
回复
有损压缩的算法有吗?
fxyuer2004
2005-09-11
打赏
举报
回复
楼主,有没有完整的图象压缩程序啊,我想运行一下,看看结果!!!给我一个啊!!谢谢了,我刚在读大2.我对编程我好迷茫啊.有什么高招吗????
fxyuer2004
2005-09-11
打赏
举报
回复
好吧,我会把它看懂理解的,谢谢了
Jagen在路上
2005-09-11
打赏
举报
回复
好的算法就是你楼上的那些,但是如果想要理解,先学好高等数学。
fxyuer2004
2005-09-11
打赏
举报
回复
建议个好的算法啊,???
dreamer2k
2005-09-11
打赏
举报
回复
高招就是不要好高鹜远
踏实的学习
dreamer2k
2005-09-09
打赏
举报
回复
这个网上有很多,我做过小波变换压缩的,有损
上面的游程我也做过,不过对于图像不太好,建议采用离散余弦变换(DCT),这个是JPEG的核心
或者离散小波变换(DWT),用于JPEG2000
压缩算法成百上千,谁知道你要什么啊
Jagen在路上
2005-09-08
打赏
举报
回复
//===================================================================
inline BYTE * RLE_TGA_EncodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, BYTE * OutBuffer) {
DWORD Data, Next ;
BYTE * pBak ;
register DWORD Count ;
iColorBit /= 8 ; // 转换为字节数
while (iNumPixel > 0)
{
pBak = InBuffer ; // 记数指针
memcpy (&Data, InBuffer, iColorBit) ; // 第一个像素
InBuffer += iColorBit ; iNumPixel-- ; Count = 1 ;
while ((Count < 0x7F) && (iNumPixel > 0)) // 统计重复像素
{
memcpy (&Next, InBuffer, iColorBit) ; // 下一个像素
if (Next != Data)
break ;
InBuffer += iColorBit ; iNumPixel-- ; Count++ ;
}
if (Count == 1) // 无重复像素
{
while ((Count < 0x7F) && (iNumPixel > 0)) // 统计不重复像素
{
Count++ ; Data = Next ;
InBuffer += iColorBit ; iNumPixel-- ;
memcpy (&Next, InBuffer, iColorBit) ; // 下一个像素
if (Data == Next)
break ;
}
// 直接copy不重复像素
*OutBuffer++ = (BYTE)(Count - 1) ;
Count = InBuffer - pBak ; // Count->临时变量
memcpy (OutBuffer, pBak, Count) ;
OutBuffer += Count ;
}
else // 重复像素
{
*OutBuffer++ = 0x80 | (BYTE)--Count ;
memcpy (OutBuffer, &Data, iColorBit) ;
OutBuffer += iColorBit ;
}
} // End of while
return OutBuffer ;
}
//===================================================================
#endif
Jagen在路上
2005-09-08
打赏
举报
回复
#ifndef __FOO_RLE_COMPRESS_H__
#define __FOO_RLE_COMPRESS_H__
#include <windows.h>
#pragma once
//====================================================================
// RLE - 压缩算法
//====================================================================
//////////////////////////////////////////////////////////////////////
// 功 能 :RLE压 / 解压缩 ( PCX, TGA 图像 ) //
// //
// 参 数 :iColorBit 为像素颜色位数 //
// PCX为 :1, 4, 8, 24 //
// TGA为 :8, 16, 24, 32 //
// iNumPixel 为写入OutBuffer中的像素个数 //
// //
// 返回值 :EncodeLine 返回编码后 OutBuffer 的指针 //
// DecodeLine 返回解码后 InBuffer 的指针 //
// //
// 说 明 :PCX图像 :1,4,8位色位图按字节处理,24位色分成3通道处理 //
// TGA图像 :支持8, 16, 24, 32色, 不支持15位色 //
// 压缩时OutBuffer至少两倍InBuffer大小 //
//////////////////////////////////////////////////////////////////////
BYTE * RLE_PCX_EncodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, // iNumPixel即为图像宽
BYTE * OutBuffer) ;
BYTE * RLE_PCX_DecodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, // iNumPixel即为图像宽
BYTE * OutBuffer) ;
BYTE * RLE_TGA_EncodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, // iNumPixel即为图像宽
BYTE * OutBuffer) ;
BYTE * RLE_TGA_DecodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, // iNumPixel即为图像宽
BYTE * OutBuffer) ;
//===================================================================
// Implement
//===================================================================
inline BYTE * RLE_PCX_DecodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, BYTE * OutBuffer) {
register BYTE Data, Num, Pack = 8 / iColorBit ;
if (iColorBit <= 8) // 1,4,8位色
while (iNumPixel > 0)
{
Data = *InBuffer++ ; // Next Byte
if ( (Data & 0xC0) == 0xC0 ) // Data >= 0xC0
{
Num = Data & 0x3F ; // 重复字节
memset (OutBuffer, *InBuffer++, Num) ;
OutBuffer += Num ; iNumPixel -= Num * Pack ;
}
else
{
*OutBuffer++ = Data ;
iNumPixel -= Pack ;
}
}
else // 24位色分Channel
for (int i = 2 ; i >= 0 ; i--) // RGB channel
{
int iCount = iNumPixel ;
BYTE * pChannel = OutBuffer + i ;
while (iCount-- > 0) // 一定会写入一个像素(--)
{
Data = *InBuffer++ ; // Next Byte
if ( (Data & 0xC0) == 0xC0 ) // Data >= 0xC0
{
Num = Data & 0x3F ; // 重复像素
for (int x = 0 ; x < Num ; x++, pChannel += 3)
*pChannel = *InBuffer ;
InBuffer++ ;
iCount -= Num - 1 ;
}
else
{ *pChannel = Data ; pChannel += 3 ; }
}
}
return InBuffer ;
}
//===================================================================
inline BYTE * RLE_PCX_EncodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, // iNumPixel即为图像宽
BYTE * OutBuffer) {
register BYTE data, cCount ;
int PcxRow = 2 * ( (iNumPixel * (iColorBit % 16) + 15) / 16 ) ;
if (iColorBit <= 8) // 1,4,8位色
while (PcxRow > 0)
{
cCount = 1 ; data = *InBuffer++ ; PcxRow-- ;
while ( (cCount < 0x3F) && (PcxRow != 0) )
if (*InBuffer != data)// 统计重复字节个数
break ;
else
{
cCount++ ; InBuffer++ ; PcxRow-- ;
}
if (cCount == 1) // 无重复像素
if ( (data & 0xC0) == 0xC0 ) // Data >= 0xC0
{
*OutBuffer++ = 0xC1 ;
*OutBuffer++ = data ;
}
else
*OutBuffer++ = data ; // Data < 0xC0, 直接写字节
else // 重复像素
{
*OutBuffer++ = 0xC0 | cCount ;
*OutBuffer++ = data ;
}
} // 1,4,8位色结束
else // 24位色分Channel
for (int i = 2 ; i >= 0 ; i--) // RGB channel
{
DWORD RowBak = PcxRow ; // 每Channel字节数
BYTE * pChannel = InBuffer + i ;
while (RowBak > 0)
{
cCount = 1 ; data = *pChannel ; pChannel += 3 ; RowBak-- ;
while ( (cCount < 0x3F) && (RowBak != 0) )
if (*pChannel != data) // 统计重复字节个数
break ;
else
{
cCount++ ; pChannel += 3 ; RowBak-- ;
}
if (cCount == 1) // 无重复像素
if ( (data & 0xC0) == 0xC0 ) // Data >= 0xC0
{
*OutBuffer++ = 0xC1 ;
*OutBuffer++ = data ;
}
else
*OutBuffer++ = data ;
else // 重复像素
{
*OutBuffer++ = 0xC0 | cCount ;
*OutBuffer++ = data ;
}
}
}
return OutBuffer ;
}
//===================================================================
inline BYTE * RLE_TGA_DecodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, BYTE * OutBuffer) {
register BYTE Data ;
register int Num ;
iColorBit /= 8 ; // 转换为字节数
while (iNumPixel > 0)
{
Data = *InBuffer++ ; // Next Byte
if (Data & 0x80) // Data >= 0x80
{
iNumPixel -= (Num = (Data & 0x7F) + 1) ;
for (int i = 0 ; i < Num ; i++, OutBuffer += iColorBit)
memcpy (OutBuffer, InBuffer, iColorBit) ;
InBuffer += iColorBit ;
}
else // 直接copy Num个像素
{
iNumPixel -= (Num = ++Data) ;
Num *= iColorBit ;
memcpy (OutBuffer, InBuffer, Num) ;
OutBuffer += Num ;
InBuffer += Num ;
}
} // End of while
return InBuffer ;
}
fishgee
2005-09-08
打赏
举报
回复
网上去找吧,应该能找到的
striker_un
2005-09-08
打赏
举报
回复
路过,看过。
fxyuer2004
2005-09-08
打赏
举报
回复
用JPG格式就可以了!哈哈??
fxyuer2004
2005-09-08
打赏
举报
回复
高手,楼主,动手吧!!! UP !
JPEG
图像
压缩
解压
算法——C++实现
本文详述了作者基于JPEG
图像
压缩
解压
算法的C++实现
过程
,涵盖了实验目的、设备环境、实验内容及操作步骤。通过700多行代码实现了JPEG的
压缩
编码和解码,讨论了在编码
过程
中遇到的系统问题、编程语言限制以及课本错误。此外,还分享了编码经验,如变量管理、编码规范和跨平台兼容性问题。
图像
压缩
解压
过程
本文详细阐述了从摄像机捕获
图像
到显示的全
过程
,包括
图像
数据的
压缩
、封装、
解压
和显示。介绍了CCD/CMOS感光元件的工作原理,数据
压缩
的有损与无损方法,如JPEG和MPEG4,以及数据封装和
解压
中的元数据作用。
解压
后
图像
数据通过显卡D/A转换,最终在显示器上呈现。
来手把手教你通过Matlab用两种方法实现
图像
压缩
与
解压
(附超详细代码),赶紧点赞收藏吧
本文手把手教你使用Matlab实现DCT
图像
压缩
与
解压
,详细解析DCT原理及算法,并提供了全程代码示例。同时介绍了行程编码在
图像
压缩
中的应用,包括
图像
读入、矩阵转换、
压缩
解压
过程
,以及最终结果展示。
RLE
压缩
解压
算法
本文详细介绍了RLE(Run-Length Encoding)
压缩
算法的原理和C语言实现,包括如何通过位操作和RLE算法对二进制文件进行
压缩
和
解压
缩。文中给出了两个实现RLE编码和解码的函数,以及用于文件
压缩
和
解压
缩的函数。
压缩
过程
通过判断连续重复数据和非重复数据,分别进行编码;
解压
缩
过程
则根据编码后的数据标志进行解码。文章还提供了完整的代码示例,展示了如何在命令行参数下运行该程序。
C++项目:基于HuffmanTree实现文件的
压缩
与
解压
缩
本文详细介绍了Huffman Tree在文件
压缩
中的应用,包括原理、步骤、问题解决策略,涵盖了字符文件、文本文件、图片文件的测试结果,并讨论了
压缩
效率、
解压
缩
过程
中的挑战和编码变大情况。
C++ 语言
65,210
社区成员
250,515
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章