鱼C论坛

 找回密码
 立即注册
查看: 1717|回复: 7

位图坐标变换

[复制链接]
发表于 2014-9-26 20:16:11 | 显示全部楼层 |阅读模式
10鱼币
  大神求助啊,谁能给我讲一下关于位图像素点旋转90度然后输出的代码啊。比如说打开一幅.bmp的图像然后旋转90度并保存输出。给下思路也可以,求大神们指导啊!!!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-27 05:18:04 | 显示全部楼层
你可以用plgblt函数旋转图像,好像是gdi+里面的
也可以把图像像素读到二维数组,通过矩阵变换来实现,给你做了一个小例子

49.png

void RotateBmp(int * Arr,int Lines,int cols )
{

        printf("\n\n\n\n原始图像像素分布↓↓↓\n\n\n");
        for(int i=0 ; i<Lines ;i++)
        {
                for(int j=0 ; j<cols ;j++)
                {
                        printf("\t%d",*(Arr+i*(Lines+1)+j));
                }
                printf("\n");
        }


        printf("\n\n\n\n逆时针旋转90°后↓↓↓\n\n\n");

        for(int i=0 ; i<cols ;i++)
        {
                for(int j=0 ; j<Lines ;j++)
                {
                        printf("\t%d",*(Arr+j*(cols)+Lines-i));
                }
                printf("\n");
        }
        printf("\n\n\n");
}

int main()
{

        //假设下面数组是bmp的像素
        int bmp[4][5]={
                                {1,2,3,4,5},
                                {6,7,8,9,10},
                                {11,12,13,14,15},
                                {16,17,18,19,20}};


                                RotateBmp((int *)bmp,4,5);

        system("pause");
        return 0;

}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-27 10:45:06 | 显示全部楼层
machimilk 发表于 2014-9-27 05:18
你可以用plgblt函数旋转图像,好像是gdi+里面的
也可以把图像像素读到二维数组,通过矩阵变换来实现,给你 ...

真是万分感谢了,那如果写成适用于一般情况下的,就是每行的像素点不是4的倍数或者最后一行像素点没有满敢怎么做呢,不过还是要谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-27 12:20:15 From FishC Mobile | 显示全部楼层
举一反三啊,像素是coloref数组,为什么是4的倍数啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-27 21:46:44 | 显示全部楼层
machimilk 发表于 2014-9-27 12:20
举一反三啊,像素是coloref数组,为什么是4的倍数啊

printf("\t%d",*(Arr+j*(cols)+Lines-i));  请问这行代码我不是很明白,,二维数组输出为什么要这样?
谢谢了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-27 22:00:57 | 显示全部楼层
比如你原图是800x600的,你要动态生成一个800x600的数组比如 colorref bmpold[600][800] ,把像素读取进去对吧,然后你再动态生成一个行列调换的数组 比如 colorref bmpnew[800][600]
然后就是矩阵转换了,你用纸画一下,就知道调换后行列的变化关系了,你提问的那句话就是
指针指向二维数组,人为换行打印输入用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2014-11-1 07:21:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2014-12-2 20:24:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 10:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表