附上程序:
图片顺时针旋转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;
}