📄 block.c
字号:
#include "block.h"
#include "../global.h"
//***********************************************************************************************
//函 数 名:Transfer16_ImageToBlock()
//函数功能:
//形式参数:
//返 回 值:void
//***********************************************************************************************
/*
void Transfer16_ImageToBlock(short* Dst, short* Src, short iStride)
{
short i, j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
Dst[i*8+j] = Src[i*iStride+j];
}
}
}
*/
/*
void Transfer16_BlockToImage(short* Dst, short* Src, short iStride)
{
short i, j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
Dst[i*iStride+j] = Src[i*8+j];
}
}
}
*/
/*
void Transfer16_ImageToImage(short* Dst, short* Src, short iStride)
{
short i, j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
Dst[i * iStride + j] = Src[i * iStride + j];
}
}
}
*/
/*
void Transfer16_BlockSubBlock(short* Dst, short* Src)
{
short i, j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
Dst[i * 8 + j] -= Src[i * 8 + j];
}
}
}
*/
/*
//***********************************************************************************************
//函 数 名:Transfer16_BlockAddBlock()
//函数功能:将对应位置上的Dst=Src+Dst,并对Dst进行0-255限制范围
//形式参数:void
//返 回 值:void
//***********************************************************************************************
void Transfer16_BlockAddBlock(short* Dst, short* Src)
{
short i, j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
Dst[i * 8 + j] += Src[i * 8 + j];
Dst[i*8+j]=CLIP(Dst[i*8+j], 0, 255);
}
}
}
*/
/*
void Transfer16_ImageAddToImage(short* Dst, short* Src, short iStride)
{
short i, j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
Dst[i * iStride + j] += Src[i * iStride + j];
}
}
}
*/
/*
void Transfer16_BlockAddToImage(short* Dst, short* Src, short iStride)
{
short i, j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
Dst[i * iStride + j] += Src[i * 8+ j];
Dst[i * iStride + j] = CLIP(Dst[i * iStride + j], 0, 255);
}
}
}
*/
/*
void Transfer16_ImageToBlock_Interpolate_H(short* Dst, unsigned char* Src, short iStride, short iRounding)
{
short i, j;
unsigned char * Src1 = Src + 1;
for (j = 0; j < 8; j++)
{
for (i = 0; i < 8; i++)
{
Dst[j*8+i] = (Src[j*iStride+i] + Src1[j*iStride+i] + 1 - iRounding)>>1;
}
}
}
void Transfer16_ImageToBlock_Interpolate_V(short* Dst, unsigned char* Src, short iStride, short iRounding)
{
short i, j;
unsigned char* Src1 = Src + iStride;
for (j = 0; j < 8; j++)
{
for (i = 0; i < 8; i++)
{
Dst[j*8+i] = (Src[j*iStride+i] + Src1[j*iStride+i] + 1 - iRounding)>>1;
}
}
}
void Transfer16_ImageToBlock_Interpolate_HV(short* Dst, unsigned char* Src, short iStride, short iRounding)
{
short i, j;
for (j = 0; j < 8; j++)
{
for (i = 0; i < 8; i++)
{
Dst[j*8+i] = (Src[j*iStride+i] + Src[j*iStride+i+1] + Src[(j+1) * iStride+i] + Src[(j+1) * iStride + i + 1] + 2 - iRounding) >> 2;
}
}
}
*/
/*
void Transfer16_ImageToImage_Interpolate_H(short* Dst, short* Src, short iStride, short iRounding)
{
short i, j;
short* Src1 = Src + 1;
for (j = 0; j < 8; j++)
{
for (i = 0; i < 8; i++)
{
Dst[j*iStride+i] = (Src[j*iStride+i] + Src1[j*iStride+i] + 1 - iRounding)>>1;
}
}
}
void Transfer16_ImageToImage_Interpolate_V(short* Dst, short* Src, short iStride, short iRounding)
{
short i, j;
short* Src1 = Src + iStride;
for (j = 0; j < 8; j++)
{
for (i = 0; i < 8; i++)
{
Dst[j*iStride+i] = (Src[j*iStride+i] + Src1[j*iStride+i] + 1 - iRounding)>>1;
}
}
}
void Transfer16_ImageToImage_Interpolate_HV(short* Dst, short* Src, short iStride, short iRounding)
{
short i, j;
for (j = 0; j < 8; j++)
{
for (i = 0; i < 8; i++)
{
Dst[j * iStride + i] = (Src[j*iStride+i] + Src[j*iStride+i+1] + Src[(j+1) * iStride+i] + Src[(j+1) * iStride + i + 1] + 2 - iRounding) >> 2;
}
}
}
//*********
void Transfer16_ImageSubBlock(short* Dst, short* Src, short iStride)
{
short i, j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
Dst[i*iStride+j]=Dst[i*iStride+j]-Src[i*8+j];
}
}
}
*/
//***********************************************************************************************
//函 数 名:SetImage16Edge()
//函数功能:完成对image的扩边处理(上下左右、左上、左下、右上、右下)
//形式参数:
//返 回 值:void
//***********************************************************************************************
/*
void SetImage16Edge(Image* image, short iExtWidth, short iExtHeight, short iWidth, short iHeight )
{
int i;
short *pDst;
short *pSrc;
short size = 32;
unsigned short sizehalf = size/2;
//是否是判断iWidth,iHeight为16的整数倍,若不是则变为16的整数倍
if (1)
{
iWidth = (iWidth+15)&~15;
iHeight = (iHeight+15)&~15;
}
// Y 扩边处理
//将亮度块的指针指向开始的地方
pDst = image->Y - (size + size * iExtWidth);
pSrc = image->Y;
//填充左上、上、右上扩边的值
for (i = 0; i < size; i++)
{
int j;
short temp1, temp2;
temp1 = pSrc[0];
temp2 = pSrc[iWidth - 1];
//填充扩边后的左上角32×32的四个宏块为原图象的第一行的第一个值
//填充扩边后的右上角32×32的四个宏块为原图象的第一行的最后一个值
for (j = 0; j < size; j++)
{
pDst[j] = temp1; //左上扩边的值
pDst[j + iExtWidth - size] = temp2; //右上扩边的值
}
memcpy(pDst + size, pSrc, sizeof(short) * iWidth); //将原图象的第一行拷贝到上扩边图象的第一行。
//转移到了下一行
pDst += iExtWidth;
}
//填充左右扩边的值,左边为填充图象最左边的值,右边填充原始图象对应行的最右边的值
for (i = 0; i < iHeight; i++)
{
int j;
short temp1, temp2;
temp1 = pSrc[0];
temp2 = pSrc[iWidth - 1];
for (j = 0; j < size; j++)
{
pDst[j] = temp1;
pDst[j + iExtWidth - size] = temp2;
}
pDst += iExtWidth;
pSrc += iExtWidth;
}
pSrc -= iExtWidth; //将原始图象的指针移动到扩边后的最后一行的起始地址
//左下、下、右下扩边
for (i = 0; i < size; i++)
{
int j;
short temp1, temp2;
temp1 = pSrc[0];
temp2 = pSrc[iWidth - 1];
for (j = 0; j < size; j++)
{
pDst[j] = temp1;
pDst[j + iExtWidth - size] = temp2;
}
memcpy(pDst + size, pSrc, sizeof(short) * iWidth);
pDst += iExtWidth;
}
iWidth /= 2;
iExtWidth /= 2;
iExtHeight /= 2;
// U 扩边处理
pDst = image->Cb - (sizehalf + sizehalf * iExtWidth);
pSrc = image->Cb;
for (i = 0; i < sizehalf; i++)
{
int j;
short temp1, temp2;
temp1 = pSrc[0];
temp2 = pSrc[iWidth - 1];
for (j = 0; j < sizehalf; j++)
{
pDst[j] = temp1;
pDst[j + iExtWidth - sizehalf] = temp2;
}
memcpy(pDst + sizehalf, pSrc, sizeof(short) * iWidth);
pDst += iExtWidth;
}
for (i = 0; i < iHeight/2; i++)
{
int j;
short temp1, temp2;
temp1 = pSrc[0];
temp2 = pSrc[iWidth - 1];
for (j = 0; j < sizehalf; j++)
{
pDst[j] = temp1;
pDst[j + iExtWidth - sizehalf] = temp2;
}
pDst += iExtWidth;
pSrc += iExtWidth;
}
pSrc -= iExtWidth;
for (i = 0; i < sizehalf; i++)
{
int j;
short temp1, temp2;
temp1 = pSrc[0];
temp2 = pSrc[iWidth - 1];
for (j = 0; j < sizehalf; j++)
{
pDst[j] = temp1;
pDst[j + iExtWidth - sizehalf] = temp2;
}
memcpy(pDst + sizehalf, pSrc, sizeof(short) * iWidth);
pDst += iExtWidth;
}
//V 扩边处理
pDst = image->Cr - (sizehalf + sizehalf * iExtWidth);
pSrc = image->Cr;
for (i = 0; i < sizehalf; i++)
{
int j;
short temp1, temp2;
temp1 = pSrc[0];
temp2 = pSrc[iWidth - 1];
for (j = 0; j < sizehalf; j++)
{
pDst[j] = temp1;
pDst[j + iExtWidth - sizehalf] = temp2;
}
memcpy(pDst + sizehalf, pSrc, sizeof(short) * iWidth);
pDst += iExtWidth;
}
for (i = 0; i < iHeight/2; i++)
{
int j;
short temp1, temp2;
temp1 = pSrc[0];
temp2 = pSrc[iWidth - 1];
for (j = 0; j < sizehalf; j++)
{
pDst[j] = temp1;
pDst[j + iExtWidth - sizehalf] = temp2;
}
pDst += iExtWidth;
pSrc += iExtWidth;
}
pSrc -= iExtWidth;
for (i = 0; i < sizehalf; i++)
{
int j;
short temp1, temp2;
temp1 = pSrc[0];
temp2 = pSrc[iWidth - 1];
for (j = 0; j < sizehalf; j++)
{
pDst[j] = temp1;
pDst[j + iExtWidth - sizehalf] = temp2;
}
memcpy(pDst + sizehalf, pSrc, sizeof(short) * iWidth);
pDst += iExtWidth;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -