离散余弦变换的源代码 delphi ( 积分: 100 )

  • 主题发起人 主题发起人 lisa_xia
  • 开始时间 开始时间
L

lisa_xia

Unregistered / Unconfirmed
GUEST, unregistred user!
有谁能提供一下delphi的离散余弦变换的源代码吗,谢谢啦
 
有谁能提供一下delphi的离散余弦变换的源代码吗,谢谢啦
 
有哪位高人能指点一下上述问题啊,万分感谢:)
 
DCT之类的东东网上应该早就有C代码了,自己翻译一下了
或者自己看看Matlab的源代码翻译一下了。
 
都是毕业设计的东西,第一次用delphi好繁人啊,我好象没看见网上有DCT的C之类的代码嘛,方便的话提供一下网址啦,当然啦,有delphi的源代码那是最好不过的了
 
有谁能提供delphi的源代码啊,分数好商量[:)]
 
原代码我没有,你可以使用Matlab输出的DLL呀,在delphi直接调用。
 
我这里只有个浮点dct算法,c++的

// 8x8的浮点离散余弦变换
void FDCT(FLOAT* lpBuff)
{
FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
FLOAT tmp10, tmp11, tmp12, tmp13;
FLOAT z1, z2, z3, z4, z5, z11, z13;
FLOAT* dataptr;
int ctr;

/* 第一部分,对行进行计算 */
dataptr = lpBuff;
for (ctr = DCTSIZE-1; ctr >= 0; ctr--)
{
tmp0 = dataptr[0] + dataptr[7];
tmp7 = dataptr[0] - dataptr[7];
tmp1 = dataptr[1] + dataptr[6];
tmp6 = dataptr[1] - dataptr[6];
tmp2 = dataptr[2] + dataptr[5];
tmp5 = dataptr[2] - dataptr[5];
tmp3 = dataptr[3] + dataptr[4];
tmp4 = dataptr[3] - dataptr[4];

/* 对偶数项进行运算 */
tmp10 = tmp0 + tmp3; /* phase 2 */
tmp13 = tmp0 - tmp3;
tmp11 = tmp1 + tmp2;
tmp12 = tmp1 - tmp2;

dataptr[0] = tmp10 + tmp11; /* phase 3 */
dataptr[4] = tmp10 - tmp11;

z1 = (tmp12 + tmp13) * (0.707106781); /* c4 */
dataptr[2] = tmp13 + z1; /* phase 5 */
dataptr[6] = tmp13 - z1;

/* 对奇数项进行计算 */
tmp10 = tmp4 + tmp5; /* phase 2 */
tmp11 = tmp5 + tmp6;
tmp12 = tmp6 + tmp7;

z5 = (tmp10 - tmp12) * ( 0.382683433); /* c6 */
z2 = (0.541196100) * tmp10 + z5; /* c2-c6 */
z4 = (1.306562965) * tmp12 + z5; /* c2+c6 */
z3 = tmp11 * (0.707106781); /* c4 */

z11 = tmp7 + z3; /* phase 5 */
z13 = tmp7 - z3;

dataptr[5] = z13 + z2; /* phase 6 */
dataptr[3] = z13 - z2;
dataptr[1] = z11 + z4;
dataptr[7] = z11 - z4;


dataptr += DCTSIZE; /* 将指针指向下一行 */
}

/* 第二部分,对列进行计算 */
dataptr = lpBuff;
for (ctr = DCTSIZE-1; ctr >= 0; ctr--)
{
tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];

/* 对偶数项进行运算 */
tmp10 = tmp0 + tmp3; /* phase 2 */
tmp13 = tmp0 - tmp3;
tmp11 = tmp1 + tmp2;
tmp12 = tmp1 - tmp2;

dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */
dataptr[DCTSIZE*4] = tmp10 - tmp11;

z1 = (tmp12 + tmp13) * (0.707106781); /* c4 */
dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */
dataptr[DCTSIZE*6] = tmp13 - z1;

/* 对奇数项进行计算 */
tmp10 = tmp4 + tmp5; /* phase 2 */
tmp11 = tmp5 + tmp6;
tmp12 = tmp6 + tmp7;

z5 = (tmp10 - tmp12) * (0.382683433); /* c6 */
z2 = (0.541196100) * tmp10 + z5; /* c2-c6 */
z4 = (1.306562965) * tmp12 + z5; /* c2+c6 */
z3 = tmp11 * (0.707106781); /* c4 */

z11 = tmp7 + z3; /* phase 5 */
z13 = tmp7 - z3;

dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */
dataptr[DCTSIZE*3] = z13 - z2;
dataptr[DCTSIZE*1] = z11 + z4;
dataptr[DCTSIZE*7] = z11 - z4;

++dataptr; /* 将指针指向下一列 */
}
}
 
to lisa_xia
把上面的C++代码编译成dll就OK了
 
谢谢hxb_leiyuan和islet8啦^-^,但matlab我一点都没接触过,那我试试把c++的改成Delphi吧,不知在改的过程中是否有什么要注意的呢,要加上些什么函数之类的吗?
 
再请教 if (bitmaperose(self.Image1.Picture.bitmap,ture)) then //调用位图腐蚀的函数,但出现如下错误[Error] tuxiang.pas(244): Too many actual parameters,该怎么改呢
 
明明有定义var
x,y,i,j:integer;
newbmp:tbitmap;
p,q,r,o:pbytearray;
但出现[Error] tuxiang.pas(287): Undeclared identifier: 'y'
[Error] tuxiang.pas(289): Undeclared identifier: 'o'
[Error] tuxiang.pas(289): Undeclared identifier: 'p'
[Error] tuxiang.pas(289): Undeclared identifier: 'q'
[Error] tuxiang.pas(289): Undeclared identifier: 'r'是什么原因,该如何改正呢,谢谢了
 
): Too many actual parameters

出现这种情况的原因就是你没有匹配好参数,delphi对参数的检验非常严格,特别要注意var参数的使用
 
这段代码还是我照着书上搬的呢,也会出现好多错的,那你知道该怎么改呢,谢谢啦

你(hxb_leiyuan)对delphi熟悉吗,愿意的话能否留个Mail地址联系一下:)
 
上面都说我Y,O,P...等参数没定义又是怎么回事呢
 
hxb_leiyuan2000@163.net
把你的例子发给我,我看下
 
照着书上的源程序写完的,可还出现如下错误,是什么原因呢?
[Error] tuxiang.pas(351): Declaration expected but end of file found
 
不知什么原因,发给你的邮件总是失败,你还有别的邮箱吗
 
hxbtougao@yahoo.com.cn
 
hxb_leiyuan,我的错误是不是很多啊,没把你吓到吧,能帮忙改掉些吗?谢谢啊[:)]
 
后退
顶部