c 实现jpeg中的ALI(可变长度整数转换)正反向转换

用于DC的ALI表:DIFF 就是前后两个8X8块DC的差值,ssss就是DIFF值用二进制表示的位数

亮度,与色度的DC都是这种处理的。两个相邻的亮度与亮度比差,色度与色度比差产生DIFF,

扫描开始DIFF等于0。

用于AC ALI表:表中的AC 就是Z变换后(a,b)对中的b。ssss 是b值用2进制表示的位数

亮度与色度的AC都是这样处理的

对比,两者就是少了0的处理。因为AC中的0已经被(a,b)对中的a处理了。

1.把DC转换为 二进制位数加二进制的中间格式

复制代码
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/videodev2.h>  
#include <string.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <math.h>

int main(void) {
	int i=-5;
	int o=-1;      //如果输出负数无意义
	char len=-1;   //如果输出负数无意义
	
	if(i==0){
		len=0;
	}
	if(i==-1){
		len=1;
		o=0;
	}
	if(i==1){
		len=1;
		o=1;
	}

	if((i>=2)&&(i<=32767)){             //二进制位数0-16位
		for(int a=0;a<16;a++){
			if((i>=pow(2,a))&&(i<pow(2,(a+1)))){
				len=a+1;
				o=i;
			}
		}
	}
	if((i>=-32767)&&(i<=-2)){
		for(int a=0;a<16;a++){
			if((i<=-pow(2,a))&&(i>-pow(2,(a+1)))){
				len=a+1;
				o=i+pow(2,(a+1))-1;
			}
		}
	}
	
	printf("len:%d  o:%d\n",len,o);

	return 0;
}
  1. ALI逆向转换

    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/ioctl.h>
    #include <linux/videodev2.h>
    #include <string.h>
    #include <sys/mman.h>
    #include <linux/fb.h>
    #include <math.h>

    int main(void) {
    int len = 4;
    int i = 7;
    int o;

    复制代码
     if (len == 0) {
     	o = 0;
     }
     if ((len == 1) && (i == 0)) {
     	o = -1;
     }
     if ((len == 1) && (i == 1)) {
     	o = 1;
     }
     //--------------------------
     if ((i >= pow(2, len - 1)) && (i <= pow(2, len))) {
     	o = i;
     }
     if ((i >= 0) && (i < pow(2, len - 1))) {
     	o = i - pow(2, len) + 1;
     }
    
    
     printf("o:%d ", o);
     return 0;

    }

相关推荐
CoovallyAIHub15 分钟前
OpenClaw 近 2000 个 Skills,为什么没有一个好用的视觉检测工具?
深度学习·算法·计算机视觉
CoovallyAIHub17 分钟前
CVPR 2026 | 用一句话告诉 AI 分割什么——MedCLIPSeg 让医学图像分割不再需要海量标注
深度学习·算法·计算机视觉
CoovallyAIHub29 分钟前
Claude Code 突然变成了 66 个专家?这个 5.8k Star 的开源项目,让我重新理解了什么叫"会用 AI"
深度学习·算法·计算机视觉
兆子龙43 分钟前
前端哨兵模式(Sentinel Pattern):优雅实现无限滚动加载
前端·javascript·算法
后端AI实验室1 小时前
我把一个生产Bug的排查过程,交给AI处理——20分钟后我关掉了它
java·ai
凉年技术3 小时前
Java 实现企业微信扫码登录
java·企业微信
狂奔小菜鸡4 小时前
Day41 | Java中的锁分类
java·后端·java ee
hooknum4 小时前
学习记录:基于JWT简单实现登录认证功能-demo
java
CoovallyAIHub4 小时前
9个视觉语言模型工厂实测:Qwen 87.9%碾压全场,你的显卡能跑哪个?
算法
SparkX开源AI知识库5 小时前
手摸手带你安装OpenClaw并对接飞书
算法·架构