鱼C论坛

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

位图坐标变换

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

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

49.png


  1. void RotateBmp(int * Arr,int Lines,int cols )
  2. {

  3.         printf("\n\n\n\n原始图像像素分布↓↓↓\n\n\n");
  4.         for(int i=0 ; i<Lines ;i++)
  5.         {
  6.                 for(int j=0 ; j<cols ;j++)
  7.                 {
  8.                         printf("\t%d",*(Arr+i*(Lines+1)+j));
  9.                 }
  10.                 printf("\n");
  11.         }


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

  13.         for(int i=0 ; i<cols ;i++)
  14.         {
  15.                 for(int j=0 ; j<Lines ;j++)
  16.                 {
  17.                         printf("\t%d",*(Arr+j*(cols)+Lines-i));
  18.                 }
  19.                 printf("\n");
  20.         }
  21.         printf("\n\n\n");
  22. }

  23. int main()
  24. {

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


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

  32.         system("pause");
  33.         return 0;

  34. }
复制代码




小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

真是万分感谢了,那如果写成适用于一般情况下的,就是每行的像素点不是4的倍数或者最后一行像素点没有满敢怎么做呢,不过还是要谢谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-9-27 12:20:15 From FishC Mobile | 显示全部楼层
举一反三啊,像素是coloref数组,为什么是4的倍数啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

printf("\t%d",*(Arr+j*(cols)+Lines-i));  请问这行代码我不是很明白,,二维数组输出为什么要这样?
谢谢了!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

头像被屏蔽
发表于 2014-11-1 07:21:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2014-12-2 20:24:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 10:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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