社区
C++ 语言
帖子详情
图像的压缩与解压过程???
fxyuer2004
2005-09-08 09:10:28
有谁会用C或则用C++编写图像的压缩与解压过程的程序啊!!??? 帮忙啊,有60分加啊,有会的英雄吗??,你会吗?动手吧!不要犹豫! 你行的!
...全文
458
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 !
虫儿从零学c++ 2:类的基础相关知识点复习1
用的是VS2019可能不同VS或许会有不同,今天就写这么多把,明天再敲下代码记录下。
C++:类的6个知识点
例如:求1+2+3+…+n,不使用乘除,if…else,switch,while,do…while,for,三目运算符?由于每创建一次就调用一次构造函数Sum(),_i从1开始变化到n,所以_ret就加1,加2,加3……vs2022中不能使用变长数组,所以在函数int Sum_Solution(int n)中去掉参数n进行调试。拙作一篇,望诸位同道不吝斧正。
【c++】cpp类的继承
c++类的继承
C++中类的相关知识点
目录总述类基础explicit与初始化列表隐式转换和explicit构造函数初始化列表 总述 类是一种自定义的数据类型。 在设计一个类的时候要多角度考虑,这里列举几点: 如何理顺在设计一个类的时候这个类里的数据存储布局,有哪些必要的成员变量和成员函数要定义和实现。 站在使用者的角度考虑,需要给使用者提供哪些可以访问的接口,而哪些接口不对外开放,只供类内的其他成员函数使用。 在设计一个父类供子类继承的时候,如何设计这个父类,抽象出公共特性。 类基础 常规的书写规范是把类定义和类实现放在分开的
Simulink相关配置:生成C++类
博主最近在工作中用Simulink生成C++类的代码,因此将一些感悟记录下来。本文通过一个简单的例子研究Simulink生成C++类的代码以及一些相关配置。 文章目录1 创建模型2 C++类生成配置及代码生成3 配置类名、函数名、IO传参4 总结 1 创建模型 首先打开Simulink,随意创建一个简单的模型,如下图。 这里建立的控制逻辑比较简单,只是把输入信号放大两倍再输出,在C代码中对应的就是简单的乘以2。 2 C++类生成配置及代码生成 关于Embedded Coder相关配置本文不再赘述,可以参考
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章