使用斯凯平台图片缩放函数注意的地方
来源:互联网 发布:日本软件企业排名 编辑:程序博客网 时间:2024/04/28 13:06
//////////////////////////////////////////////////////////////////////////////////////////////////////
//sky-mobi 提供的图片显示接口
//////////////////////////////////////////////////////////////////////////////////////////////////////
/*
将mrp中名为filename的图片,从(x, y)开始的宽高为w, h的区域,
加载到序号为i的bmp缓冲中。max_w为名为filename的图片的图
片宽度。
mythroad中共有30个图片缓冲(序号0~29),可以将mrp中的bmp图片
加载到缓冲中,供后继的绘图等操作
当满足(x==0)&&(y==0)&&(w==max_w)条件时,mrc_bitmapLoad将导入整幅
图片,而不是一部分。
输入:
i 图片缓冲序号
filename 文件名,当文件名为"*"时,释放该缓存
x,y 源图片的起始位置
w,h 欲加载图片的宽高
max_w 欲加载图片的原始宽度
返回:
MR_SUCCESS 成功
MR_FAILED 失败
*/
int32 mrc_bitmapLoad(uint16 i, char* filename, int16 x, int16 y, uint16 w, uint16 h, uint16 max_w);
/*
将序号为i的bmp缓冲中的图片,从缓冲中的图片的(sx, sy)
开始的宽高为w, h的区域,绘制到(x, y)开始的屏幕缓冲中。
输入:
i 图片缓冲序号
x,y 屏幕位置
rop 选择如下:
BM_OR, //SRC .OR. DST* 半透明效果
BM_XOR, //SRC .XOR. DST*
BM_COPY, //DST = SRC* 覆盖
BM_NOT, //DST = (!SRC)*
BM_MERGENOT, //DST .OR. (!SRC)
BM_ANDNOT, //DST .AND. (!SRC)
BM_TRANSPARENT,//透明色不显示,图片的第一个象素(左上角
的象素)是透明色
BM_AND, //DST AND SRC
BM_GRAY, //灰度绘图, 相当于BM_TRANSPARENT+灰度绘图:
DST灰度 = 30%R + 59%G + 11%B图片序号
BM_REVERSE //反向绘图,相当于BM_TRANSPARENT+反向绘图(V1939)
sx,sy 源图片的起始位置
w,h 欲加载图片的宽高
返回:
MR_SUCCESS 成功
MR_FAILED 失败
*/
int32 mrc_bitmapShow(uint16 i, int16 x, int16 y, uint16 rop, int16 sx, int16 sy, int16 w, int16 h);
/*
用增强的方式将bmp图片绘制于指定图片中。
将序号si 的bmp缓冲中的图片,从缓冲中的图片的(sx, sy)开
始的宽高为w, h的区域,绘制到序号di 的从(dx,dy)开始的bmp
缓冲中。
模式rop选择如下:
BM_COPY, //DST = SRC* 覆盖
BM_TRANSPARENT, //透明色不显示,图片的第一个象素(左上
角的象素)是透明色
A、B、C、D用于图像变化,用于该变化的变换矩阵为:
x = A0*x0 + B0*y0
y = C0*x0 + D0*y0
这里为了表示小数,A, B, C, D均被乘以了256,即:
A = A0*256
B = B0*256
C = C0*256
D = D0*256
根据变换公式,可以绘出不同效果的图像,比如:
旋转图像:
A = 256 * cos(角度)
B = 256 * sin(角度)
C = 256 * -sin(角度)
D = 256 * cos(角度)
放大、缩小图像:
A = 256 * 放大倍数
B = 0
C = 0
D = 256 * 放大倍数
返回:
MR_SUCCESS 成功
MR_FAILED 失败
*/
int mrc_bitmapDraw(
uint16 di,
int16 dx,
int16 dy,
uint16 si,
int16 sx,
int16 sy,
uint16 w,
uint16 h,
int16 A,
int16 B,
int16 C,
int16 D,
uint16 rop
);
//////////////////////////////////////////////////////////////////////////////////////////////////////
//可能出问题的代码,原来的资源未释放得情况下申请新的资源空间可能会因为内存的不足导致加载失败
//////////////////////////////////////////////////////////////////////////////////////////////////////
//扩大图片
//返回值:0 失败
// 1 成功
int zx_draw_bmp_enlarge(char* bmp_name, //图片名称
uint16 old_width, //原来的宽度
uint16 old_height, //原来的高度
uint16 multiple1, //扩大的倍数
uint16 multiple2, //扩大的倍数
int16 new_x, //扩大后显示的位置
int16 new_y,
int16 is_upside, //是否倒置,非0倒置,0不倒置
uint16 style) //显示的方式
{
uint16 old_index = 3;
uint16 index = 4;
int32 ret= MR_FAILED;
uint16 A,D;
A = (int16)256*multiple1/10000*multiple2/10000;//164;
D = A;
ret = mrc_bitmapLoad(old_index, bmp_name, 0, 0, old_width, old_height, old_width);
if (MR_SUCCESS != ret)
{
return 0;
}
ret= MR_FAILED;
ret = mrc_bitmapNew((int16)index, (uint16)(old_width), (uint16)(old_height));
if (MR_SUCCESS != ret)
{
mrc_bitmapLoad(old_index, "*", 0, 0, old_width, old_height, old_width);
return 0;
}
if (0 == is_upside)
{
ret= MR_FAILED;
ret = mrc_bitmapDraw(index, 0, 0, old_index, 0, 0,
(int16)(old_width), (int16)(old_height), A, 0, 0, D, style);
}
else
{
ret= MR_FAILED;
ret = mrc_bitmapDraw((uint16)index, 0, 0, old_index, 0, 0,
(int16)(old_width),
(int16)(old_height),
(int16)-A, 0, 0, (int16)-D,
(uint16)style);
}
if (MR_SUCCESS != ret)
{
mrc_bitmapLoad(old_index, "*", 0, 0, old_width, old_height, old_width);
mrc_bitmapLoad(index, "*", 0, 0, old_width, old_height, old_width);
return 0;
}
mrc_bitmapShow(index, new_x, new_y, style,
(int16)(old_width*(10000-multiple1)/10000), //图片缩放积并非整数,为了图片显示完整所以此处需要根据具体大小进行更改一下,高度同此
(int16)(old_height*(10000-multiple2)/10000),
(int16)(old_width-old_width*(10000-multiple1)/5000),
(int16)(old_height-old_height*(10000-multiple2)/5000));
mrc_bitmapLoad(index, "*", 0, 0, old_width, old_height, old_width);
mrc_bitmapLoad(old_index, "*", 0, 0, old_width, old_height, old_width);
return 1;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//正确的代码
//////////////////////////////////////////////////////////////////////////////////////////////////////
//扩大图片
//返回值:0 失败
// 1 成功
int zx_draw_bmp_enlarge(char* bmp_name, //图片名称
uint16 old_width, //原来的宽度
uint16 old_height, //原来的高度
uint16 multiple1, //扩大的倍数
uint16 multiple2, //扩大的倍数
int16 new_x, //扩大后显示的位置
int16 new_y,
int16 is_upside, //是否倒置,非0倒置,0不倒置
uint16 style) //显示的方式
{
uint16 old_index = 3;
uint16 index = 4;
int32 ret= MR_FAILED;
uint16 A,D;
A = (int16)256*multiple1/10000*multiple2/10000;//164;
D = A;
ret = mrc_bitmapLoad(old_index, bmp_name, 0, 0, old_width, old_height, old_width);
if (MR_SUCCESS != ret)
{
return 0;
}
ret= MR_FAILED;
ret = mrc_bitmapNew((int16)index, (uint16)(old_width), (uint16)(old_height));
if (MR_SUCCESS != ret)
{
mrc_bitmapLoad(old_index, "*", 0, 0, old_width, old_height, old_width);
return 0;
}
if (0 == is_upside)
{
ret= MR_FAILED;
ret = mrc_bitmapDraw(index, 0, 0, old_index, 0, 0,
(int16)(old_width), (int16)(old_height), A, 0, 0, D, style);
}
else
{
ret= MR_FAILED;
ret = mrc_bitmapDraw((uint16)index, 0, 0, old_index, 0, 0,
(int16)(old_width),
(int16)(old_height),
(int16)-A, 0, 0, (int16)-D,
(uint16)style);
}
if (MR_SUCCESS != ret)
{
mrc_bitmapLoad(old_index, "*", 0, 0, old_width, old_height, old_width);
mrc_bitmapLoad(index, "*", 0, 0, old_width, old_height, old_width);
return 0;
}
mrc_bitmapLoad(old_index, "*", 0, 0, old_width, old_height, old_width);
mrc_bitmapShow(index, new_x, new_y, style,
(int16)(old_width*(10000-multiple1)/10000), //图片缩放积并非整数,为了图片显示完整所以此处需要根据具体大小进行更改一下,高度同此
(int16)(old_height*(10000-multiple2)/10000),
(int16)(old_width-old_width*(10000-multiple1)/5000),
(int16)(old_height-old_height*(10000-multiple2)/5000));
mrc_bitmapLoad(index, "*", 0, 0, old_width, old_height, old_width);
return 1;
}
- 使用斯凯平台图片缩放函数注意的地方
- 组函数 注意的地方
- PHP IN_ARRAY 函数使用需要注意的地方
- C++使用localtime函数需要注意的地方
- PHP IN_ARRAY 函数 使用需要注意的地方
- 使用函数模板需要注意的几个地方
- C++使用localtime函数需要注意的地方
- C++使用localtime函数需要注意的地方
- C语言(5) 函数使用需要注意的地方
- unix pthread_create 函数使用时需要注意的一个地方
- 跨平台网络通讯要注意的地方
- poppopupwindow 使用注意的地方
- 使用LuaSocketHttp注意的地方
- setInterval() 使用注意的地方
- IOS 处理图片要注意的地方
- php缩放图片的函数
- 编写可重入函数要注意的地方
- isnumberic函数要注意的地方
- wget手册 wget命令使用方法
- MFC窗口销毁过程 (转自 百度 拼搏真理的博客) 好东西 留着看看
- WebBrowser组件的execWB方法
- Tomcat和其他web服务器引擎的比较
- 计算机无法访问,您可能没有权限使用网络资源。
- 使用斯凯平台图片缩放函数注意的地方
- 学习笔记 从零开始学单片机(6) 键盘接口
- WinCE BSP资源收集
- Web项目的类库中引用WebService,在部署后动态配置WebService路径的方法
- 定时报时的小程序
- 使用Oracle的DBMS_SQL包执行动态SQL语句
- 接触DLL编写并实现线程注入和全局钩子
- asp.net:生成校验码的一种方法
- C# 操作串口