J2ME插值算法如何实现图片的放大缩小
short[] desBuf = new short[desW * desH];
int dx = 0;
int dy = 0;
int sx = 0;
int sy = 0;
int oldy = -1;
for (int i = 0; i < desH; i++) {
if (oldy == tabY[i]) {
ycopy(desBuf, dy - desW, desBuf, dy, desW);
} else {
dx = 0;
for (int j = 0; j < desW; j++) {
desBuf[dy + dx] = srcBuf[sy + tabX[j]];
dx++;
}
sy += (tabY[i] - oldy) * srcW;
}
oldy = tabY[i];
dy += desW;
}
//生成图片
desImg = teImage(desW, desH);
irectGraphics(raphics()).
drawPixels(desBuf, true, 0, desW, 0, 0, desW, desH, 0, 444);
return desImg;
}
首先看函数的头两句,很容易,就是获取原始图片的宽度和高度
intsrcW=idth();//原始图像宽 intsrcH=eight();//原始图像高 |
接下来一句我们要定义一个short型数组,作为获取原始图片像素信息的缓存
short[]srcBuf=newshort[srcW*srcH]; |
再下来一段,有的朋友可能会有些不明白,这里要解释一下。由于getPixels()这个函数,只能获取可变图像的像素信息,非可变图像,无法获取像素信息。所以我们要用table() 来判断,原始图像是不是可变图像,然后分两种情况来处理。如果srcImg是可变图像,我们就直接用getPixels()来获取它的像素信息,并保存在srcBuf里。如果srcImg不是可变图像,我们就需要把srcImage画到事先生成的可变图像desImg上,然后再获取desImg的'像素信息。
ImagedesImg=teImage(srcW,srcH); if(table()){/*如果是可变图像*/ irectGraphics(raphics()). getPixels(srcBuf,0,srcW,0,0,srcW,srcH,444); }else{/*如果是非可变图像*/ raphics()Image(srcImg,0,0,0); irectGraphics(raphics()). getPixels(srcBuf,0,srcW,0,0,srcW,srcH,444); } |
再往下就是缩放算法的重点:插值表的生成。插值表分水平差值表和垂直插值表,我们要分别生成原始图像矩阵的2种插值表,然后利用插值表生成放大缩小后的图像矩阵。由于这个内容比较抽象,很难用文字表述清楚,所以我们用实例进行介绍。
大家看下面这个水平的1*4的表格
-----------------
| 0 | 1 | 2 | 3 |
-----------------
如果要将这个表格放大成1*6的表格,放大的表格比原始表格多出了2个格子,我们只能对这多出来的2个格子进行插值,才能完成放大的操作。现在结合生成水平插值表的代码来完成这个过程。
distance=srcW>desW?srcW:desW; for(inti=0;i<=distance;i++){/*水平方向*/ tabX[db]=(short)sb; tems+=srcW; temd+=desW; if(tems>distance){ tems-=distance; sb++; } if(temd>distance){ temd-=distance; db++; } } |
很明显原始表格宽度srcW = 4;放大后的表格宽度desW = 6;所以distance = desW = 6
-
SUN认证考试流程详细
Sun在UNIX领域一直是技术上和市场占有率的领先者;近年来又推出Java技术,更成为业界的标准。以下是小编整理的关于SUN认证考试流程详细,希望大家认真阅读!SUN认证基本知识Sun推出的专业认证包括下列三种:SUN认证种类Java认证考试关于Java方面,Sun推出四项认证:SunCer...
-
sun认证Java枚举常见7种用法
Sun公司为了为业界建立一套认证的标准,特别针对最先进的科技,推出Java以及Solaris技术认证方案。根据这些认证,在技术方面,通过这些认证也可以证明个人的技术能力。下面一起来看看sun认证中java的枚举方法!DK1.5引入了新的类型——枚举。在Java中它虽然...
-
2017年java程序员考试试题
SunJava认证分为两个级别:Sun认证Java程序员和Sun认证Java开发员。下面是小编整理的关于java程序员考试试题,欢迎大家参考!1、是否可以继承String类?答:String类是final类,不可以被继承。补充:继承String本身就是一个错误的行为,对String类型最好的重用方式是关联(HA...
-
ccna安全认证考试指南
CCNA全称是CiscoCertifiedNetworkAssociate,翻译过来就是思科认证网络工程师。下面是小编整理的关于ccna安全认证考试指南,欢迎大家参考!思科认证介绍思科认证是由网络领域著名的厂商--Cisco公司推出的。该公司针对其产品的网络规划和网络支持推出了工程师资格认...