织梦CMS - 轻松建站从此开始!

罗索

图片顺时针旋转90度的算法

落鹤生 发布于 2010-06-14 20:42 点击:次 
其实就是buffer里的数据旋转存放,将其值改为240*320的存储方式,这样问题就迎刃而解了,我现在公布算法程序,抛砖引玉,希望大虾们多多支持。
TAG:

最近在开发过程中遇到一个问题,手机屏幕是240*320,但拍摄的照片是320*240的,所以正常情况下,图片是不能全屏显示的,要么失真,要么就中间部分区域显示,感觉很不爽。而且,网上有好多320*240的图片,很好看,下载到手机上显示不出来原来的效果,很郁闷,既然屏是240*320的,为什么320*240的图片不能全屏显示呢,其实,只要横过来画图就可以了,依此想法,设计了一个算法,其实就是buffer里的数据旋转存放,将其值改为240*320的存储方式,这样问题就迎刃而解了,我现在公布算法程序,抛砖引玉,希望大虾们多多支持。

附上程序:

图片顺时针旋转90度的算法

/*************************************************************************
* Function name: lct_deasil_rotate_bitmap_bits_90_degrees
* Author: 豪情飞翔 Version: 1.0 Date: 2007-11-16
* Description:
* 1. 函数实现图片位图数据旋转的功能, 顺时针旋转90 度
* 2. 转换后的数据保存在 rotate_result 指向的空间
* Input:
* 1. UINT8* rotate_result 转换后的数据存放指针
* 2. UINT8* rotate_original 转换前的数据存放指针
* 3. UINT8 u8BytesPerPixel 每个像素所占用的字节数,即位值除以8
* 4. UINT32 u32Original_width 原始图片的宽度
* 5. UINT32 u32Original_height 原始图片的高度
* return: SINT32
**************************************************************************/
SINT32 lct_deasil_rotate_bitmap_bits_90_degrees( UINT8* rotate_result,
UINT8* rotate_original,
UINT8 u8BytesPerPixel,
UINT32 u32Original_width,
UINT32 u32Original_height )
{
int i;
int j;
int k;
int nWidth = u32Original_height;
int nlength_original_height;
int nlength_original_width;

nlength_original_height = u32Original_height * u8BytesPerPixel;
nlength_original_width = u32Original_width * u8BytesPerPixel;

for( i=0; i<u32Original_width; i++ )
{
for( j=0; j<u32Original_height; j++ )
{
for( k=0; k<u8BytesPerPixel; k++ )
{
memcpy( (void*)(rotate_result + i*nlength_original_height + j*2 + k ),
(void*)(rotate_original + (nWidth-1-j)*nlength_original_width + i*2 + k ),
1 );
}
}
}

return 0;
}

参考应用程序

/*************************************************************************
* Function name: lct_convert_bitmap_to_240_320
* Author: 豪情飞翔 Version: 1.0 Date: 2007-11-16
* Description:
* 1. 函数功能实现将320*240 的图片旋转为240*320 的图片
* 2.
* Input:
* 1. PBITMAP bitmap_320_240 输入/ 输出参数, 保存转换后的数据
* return: SINT32
**************************************************************************/
SINT32 lct_convert_bitmap_to_240_320( PBITMAP bitmap_320_240 )
{
UINT8* bits_240_320 = NULL;
if ( bitmap_320_240->bmBytesPerPixel < 0 || bitmap_320_240->bmBytesPerPixel > 4 )
{
return -1;
}
if( !((bitmap_320_240->bmHeight == 240)&&(bitmap_320_240->bmWidth == 320)) )
{
return -1;
}

bits_240_320 = (UINT8*)malloc( 320 *240 * bitmap_320_240->bmBytesPerPixel );
if( NULL == bits_240_320 )
{
return -1;
}

lct_deasil_rotate_bitmap_bits_90_degrees( bits_240_320,
bitmap_320_240->bmBits,
bitmap_320_240->bmBytesPerPixel,
bitmap_320_240->bmWidth,
bitmap_320_240->bmHeight );

free( bitmap_320_240->bmBits );

bitmap_320_240->bmBits = bits_240_320;
bitmap_320_240->bmHeight = 320;
bitmap_320_240->bmWidth = 240;

//bmpitch 的含义是一个扫描行的字节数
bitmap_320_240->bmPitch = bitmap_320_240->bmWidth * bitmap_320_240->bmBytesPerPixel;

return 0;
}

(豪情飞翔)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201006/9652.html]
本文出处:百度博客 作者:豪情飞翔
顶一下
(0)
0%
踩一下
(2)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容