Chinaunix首页 | 论坛 | 博客
  • 博客访问: 482087
  • 博文数量: 98
  • 博客积分: 3265
  • 博客等级: 中校
  • 技术积分: 1227
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 00:29
文章分类

全部博文(98)

文章存档

2012年(6)

2011年(83)

2010年(9)

分类: C/C++

2012-06-19 23:02:19

原理为:将原始图像的每个像素通过一个比例关系式映射到相应的位置。

/*
 lrgb:   input 24bits rgb buffer
 srgb:   output 24bits rgb buffer
 width:  input width
 height: input height
 xscale: changed vector
 yscale: changed vector
 */
int lrgbtosrgb(unsigned char *lrgb, unsigned char *srgb, int width, int height, float xscale, float yscale)
{
        int in = 0, out = 0;
        int ox, oy;     //the pixel site is after changed
        int rx, ry;     //the pixel site is before changed
        int temp = 0;   //turn site(x,y) to memory storage
        int outwidth = width * xscale;      //after changed width
        int outheight = height * yscale;    //after changed height

        //rx = ox/xscale + 0.5;     // out--to--input
        //ry = oy/yscale + 0.5;     // out--to--input

        for(oy = 0; oy < outheight; oy++)
        {
                ry = (int)(oy/0.5 + 0.5);
                if(ry >= height)
                        ry--;
                temp = ry * width *3;   //origion pixel site of which width

                for(ox = 0; ox < outwidth; ox++)
                {
                        rx = (int)(ox/0.5 + 0.5);
                        if(rx >= width)
                                rx--;
                        in = temp + rx * 3;     //change site(x,y) to storage

                        srgb[out+0] = lrgb[in+0];
                        srgb[out+1] = lrgb[in+1];
                        srgb[out+2] = lrgb[in+2];

                        out += 3;
                }
        }
        return 0;
}
阅读(5048) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~