打印

圈圈好像做过这个算法呀!不然怎么连那个数组都给猜对了

[复制链接]
3698|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
艾森豪威尔|  楼主 | 2007-3-21 15:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在这个算法已经有点眉目了,我这是JPEG->BMP转换的代码,现在转换后的BMP已经能能出来大致的轮廓了,但是各种颜色有点混乱,请各位大虾再加把劲帮我把这个弄出来,谢谢!
singed short get_svalue(unsigned char k)
// k>0 always
// Takes k bits out of the BIT stream (wordval), and makes them a signed value
{
    _asm {
           xor ecx, ecx
           mov cl,k
           mov eax,[wordval]//wordval为unsigned int类型
           shl eax,cl
           shr eax, 16
           dec cl
           bt eax,ecx
           jc end_macro
    signed_value:inc cl
           mov ebx,[start_neg_pow2]//start_neg_pow2为signed short*指针
           add ax,word ptr [ebx+ecx*2]
         end_macro:
    }
}

unsigned short WORD_hi_lo(unsigned char byte_high,unsigned char byte_low)
{
    _asm {
          mov ah,byte_high
          mov al,byte_low
         }
}

unsigned short lookKbits(unsigned char k)
{
_asm {
     mov dl, k
     mov cl, 16
     sub cl, dl
     mov eax, [wordval]//wordval为unsigned int类型
     shr eax, cl
}
}

相关帖子

沙发
lenglx| | 2007-3-21 18:45 | 只看该作者

简单

singed short get_svalue(unsigned char k)
{
    unsigned int tmp = (wordval << k ) >> 16;
    
    if(0 == tmp & ( 1<< (k-1) ) )
        tmp += start_neg_pow2[k-1];
        
    return tmp;        
}

unsigned short WORD_hi_lo(unsigned char byte_high,unsigned char byte_low)
{
    return ((unsigned short)byte_hight<<8) + byte_low;
}

unsigned short lookKbits(unsigned char k)
{
    return wordval >> (16 - k);
}

使用特权

评论回复
板凳
艾森豪威尔|  楼主 | 2007-3-21 19:36 | 只看该作者

请教楼上大虾

add ax,word ptr [ebx+ecx*2]
是否应为tmp += start_neg_pow2[k*2];   ?

使用特权

评论回复
地板
音乐乐乐| | 2007-3-21 19:48 | 只看该作者

PC汇编?强

使用特权

评论回复
5
lenglx| | 2007-3-21 20:01 | 只看该作者

tmp += start_neg_pow2[k*2]; ?


add ax,word ptr [ebx+ecx*2]
是否应为tmp += start_neg_pow2[k*2];   ?

NO.
因为start_neg_pow2是 unsinged short(2 bytes) 指针,而不是char指针.

使用特权

评论回复
6
艾森豪威尔|  楼主 | 2007-3-21 20:12 | 只看该作者

那为什么是k-1呢?

使用特权

评论回复
7
AA_55| | 2007-3-21 20:21 | 只看该作者

看看热闹。如果圈圈不出手,俺就眼看着楼主淹没

使用特权

评论回复
8
computer00| | 2007-3-21 21:07 | 只看该作者

估计楼主贴出的程序有点小问题

jc end_macro 应该是jnc end_macro 吧

看起来似乎是这样:


signed short neg_pow2[16]={~0x01,~0x03,~0x07,~0x0f,~0x1f,~0x3f,~0x7f,~0xff,                     ~0x1ff,~0x3ff,~0x7ff,~0xfff,~0x1fff,~0x3fff,~0x7fff,~0xFFFF};

unsigned short int wordval;


signed short get_svalue(unsigned char k)
// k>0 always
// Takes k bits out of the BIT stream (wordval), and makes them a signed value
{
 signed short temp;
 temp=wordval>>(16-k);
 if(temp&(1<<(k-1)))
  {
   temp|=neg_pow2[k-1];
  }
 return temp;
}

unsigned short WORD_hi_lo(unsigned char byte_high,unsigned char byte_low)
{
 return ((unsigned short)byte_high<<8)+byte_low;
}

unsigned short lookKbits(unsigned char k)
{
 return wordval>>(16-k);
}

使用特权

评论回复
9
艾森豪威尔|  楼主 | 2007-3-21 21:28 | 只看该作者

我可以保证我贴的程序没问题

另外wordval为unsigned int

使用特权

评论回复
10
艾森豪威尔|  楼主 | 2007-3-22 08:54 | 只看该作者

圈圈以及各位大虾继续啊!

现在这个算法已经有点眉目了,我这是JPEG->BMP转换的代码,现在转换后的BMP已经能能出来大致的轮廓了,但是各种颜色有点混乱,请各位大虾再加把劲帮我把这个弄出来,谢谢!

使用特权

评论回复
11
艾森豪威尔|  楼主 | 2007-3-22 16:36 | 只看该作者

顶起来

使用特权

评论回复
12
lenglx| | 2007-3-22 16:43 | 只看该作者

这样

   if(0 == tmp & ( 1<< (k-1) ) )
        tmp += start_neg_pow2[k-1];
改成试下:
   if(0 == tmp & ( 1<< (k-1) ) )
        tmp += start_neg_pow2[k];

使用特权

评论回复
13
computer00| | 2007-3-22 16:51 | 只看该作者

从他给的注释来看,不是那样子的

//Takes k bits out of the BIT stream (wordval), and makes them a signed value

我是按照这个注释来写的。

如果按照下面的程序来写,就是这样了:

signed short get_svalue(unsigned char k)
// k>0 always
// Takes k bits out of the BIT stream (wordval), and makes them a signed value
{
signed short temp;
temp=wordval>>(16-k);
if(!(temp&(1<<(k-1))))
  {
   temp|=neg_pow2[k];
  }
return temp;
}

使用特权

评论回复
14
艾森豪威尔|  楼主 | 2007-3-22 19:49 | 只看该作者

temp|=neg_pow2[k];是对的,这个我之前试过

但是现在图片表面有一层暗绿色,原来是没有的,看起来整个图片有点发暗

使用特权

评论回复
15
lenglx| | 2007-3-22 19:52 | 只看该作者

你的意思用它的那段汇编就正常了不成?

或者它本身的那段汇编代码就有你说的那个"暗绿色"的毛病.

使用特权

评论回复
16
艾森豪威尔|  楼主 | 2007-3-23 10:02 | 只看该作者

圈圈好像做过这个算法呀!不然怎么连那个数组都给猜对了

楼上,好像真的如你所说呀!它的算法本来就有问题。
圈圈大虾,lenglx大虾,能否给个好点的jpg->bmp的算法我呀?

使用特权

评论回复
17
xwj| | 2007-3-23 10:14 | 只看该作者

JPEG算法还是很复杂的,去这个网站看吧,太多图像方面的源

你随便找个参考一下吧:-)

使用特权

评论回复
18
艾森豪威尔|  楼主 | 2007-3-23 10:26 | 只看该作者

多谢楼上大侠了!

可是这个网站上没有啊!

使用特权

评论回复
19
computer00| | 2007-3-23 12:02 | 只看该作者

数组是根据你的注释以及下面的程序猜出来的

// k>0 always
// Takes k bits out of the BIT stream (wordval), and makes them a signed value

注释: 从wordval位串中取出k位,并把它转化为有符号的值



你用我最先贴出的程序,就可以实现这个功能。而你的汇编程序,不能实现这个功能,
除非是注释写错了。

使用特权

评论回复
20
艾森豪威尔|  楼主 | 2007-3-26 11:37 | 只看该作者

msn

embededman@hotmail.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

46

帖子

0

粉丝