位图坐标变换
大神求助啊,谁能给我讲一下关于位图像素点旋转90度然后输出的代码啊。比如说打开一幅.bmp的图像然后旋转90度并保存输出。给下思路也可以,求大神们指导啊!!! 你可以用plgblt函数旋转图像,好像是gdi+里面的也可以把图像像素读到二维数组,通过矩阵变换来实现,给你做了一个小例子
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={
{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;
}
machimilk 发表于 2014-9-27 05:18
你可以用plgblt函数旋转图像,好像是gdi+里面的
也可以把图像像素读到二维数组,通过矩阵变换来实现,给你 ...
真是万分感谢了,那如果写成适用于一般情况下的,就是每行的像素点不是4的倍数或者最后一行像素点没有满敢怎么做呢,不过还是要谢谢你 举一反三啊,像素是coloref数组,为什么是4的倍数啊 machimilk 发表于 2014-9-27 12:20
举一反三啊,像素是coloref数组,为什么是4的倍数啊
printf("\t%d",*(Arr+j*(cols)+Lines-i));请问这行代码我不是很明白,,二维数组输出为什么要这样?
谢谢了! 比如你原图是800x600的,你要动态生成一个800x600的数组比如 colorref bmpold ,把像素读取进去对吧,然后你再动态生成一个行列调换的数组 比如 colorref bmpnew
然后就是矩阵转换了,你用纸画一下,就知道调换后行列的变化关系了,你提问的那句话就是
指针指向二维数组,人为换行打印输入用的
页:
[1]