社区
C++ 语言
帖子详情
图像的压缩与解压过程???
fxyuer2004
2005-09-08 09:10:28
有谁会用C或则用C++编写图像的压缩与解压过程的程序啊!!??? 帮忙啊,有60分加啊,有会的英雄吗??,你会吗?动手吧!不要犹豫! 你行的!
...全文
415
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 !
利用libjpeg在内存中进行
图像
压缩
和
解压
缩
本软件包含修改后的libjpeg源代码,并提供了测试程序,演示了使用libjpeg直接处理内存中的
图像
,而无需借助文件操作。 针对有人说我是骗子这件事,特别说明:我的标题已经说的很清楚了,这个库本来就是我在Libjpeg库...
java源码包---java 源码 大量 实例
Java数据
压缩
与传输实例,可以学习一下实例化套按字、得到文件输入流、
压缩
输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
图像
压缩
解压
过程
以下是
图像
压缩
解压
的整个流程图: 图
图像
压缩
解压
的流程图 从摄像头捕获
图像
常见的感光元件有CCD和CMOS材料。在摄像机内部,实际景物的光信号被CCD/CMOS转换为电信号,然后经过A/D转换输出量化电平值。此时...
来手把手教你通过Matlab用两种方法实现
图像
压缩
与
解压
(附超详细代码),赶紧点赞收藏吧
图像
压缩
方法DCT
图像
压缩
DCT原理介绍DCT和它
解压
时的反运算的具体算法详细实现代码结果展示行程编码
压缩
与
解压
读入
图像
图像
转为矩阵行程编码
压缩
行程编码
解压
显示
图像
完整代码附录 DCT
图像
压缩
DCT原理介绍 数字
图像
...
JPEG
图像
压缩
解压
算法——C++实现
兹于2017年11月,应《多媒体技术基础》课程实验的要求,本人就基于JPEG
图像
压缩
解压
算法做了较为深入的理解,用C++语言实现JPEG
图像
压缩
解压
算法。JPEG
图像
压缩
解压
算法一、实验目的1.掌握JPEG的
压缩
原理;2.熟知...
C++ 语言
64,670
社区成员
250,489
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章