j2me图像处理特效处理1.docx
- 文档编号:29098086
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:17
- 大小:17.14KB
j2me图像处理特效处理1.docx
《j2me图像处理特效处理1.docx》由会员分享,可在线阅读,更多相关《j2me图像处理特效处理1.docx(17页珍藏版)》请在冰豆网上搜索。
j2me图像处理特效处理1
importjava.io.IOException;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
//ShadowCanvas.java
classShadowCanvasextendsCanvasimplementsRunnable{
intw,h;
Imageimg2;
ImagesrcImage;
//原始图片的像素数组
int[]srcRgbImage;
//渐变图片的像素数组
int[]shadowRgbImage;
intimgWidth,imgHeight;
intcount;
privatebooleanfirst=true;
publicShadowCanvas(){
w=this.getWidth();
h=this.getHeight();
try{
srcImage=Image.createImage("/logoBg.png");
img2=Image.createImage("/test_bg.png");
}catch(IOExceptione){
e.printStackTrace();
}
imgWidth=srcImage.getWidth();
imgHeight=srcImage.getHeight();
//制造原始图片的像素数组,用一个int来代表每一个像素,按位表示方式是:
0xAARRGGBB
srcRgbImage=newint[imgWidth*imgHeight];
//获取原始图片的所有像素,参见MIDPAPPI文档
srcImage.getRGB(srcRgbImage,0,imgWidth,0,0,imgWidth,imgHeight);
shadowRgbImage=newint[srcRgbImage.length];
System.arraycopy(srcRgbImage,0,shadowRgbImage,0,
shadowRgbImage.length);
//渐变图片的所有像素一开始都是全透明的
for(inti=0;i shadowRgbImage[i]&=0x00ffffff; } newThread(this).start(); } publicvoidpaint(Graphicsg){ // g.setColor(0,0,0); // g.fillRect(0,0,w,h); if(first){ g.drawImage(img2,0,0,0); first=false; } //绘制渐变图片 g.drawRGB(shadowRgbImage,0,imgWidth,(w-imgWidth)/2, (h-imgHeight)/2,imgWidth,imgHeight,true); // g.setColor(0,255,0); // g.drawString("count="+count,w/2,30,Graphics.HCENTER // |Graphics.TOP); } publicvoidrun(){ while(true){ booleanchanged=false; //改变渐变图片的每一个像素 for(inti=0;i //获取渐变图片的某一像素的alpha值 intalpha=(shadowRgbImage[i]&0xff000000)>>>24; //原始图片的对应像素的alpha值 intoldAlpha=(srcRgbImage[i]&0xff000000)>>>24; if(alpha //alpha值++ 写的太精妙了把移位用到了极致 shadowRgbImage[i]=((alpha+1)<<24) |(shadowRgbImage[i]&0x00ffffff); changed=true; } } try{ Thread.sleep(10); }catch(InterruptedExceptione){ e.printStackTrace(); } count++; repaint(); //当所有像素的alpha值都达到原始值后,线程运行结束 if(! changed){ System.out.println("over"); break; } } } } importjava.io.IOException; importjavax.microedition.lcdui.Canvas; importjavax.microedition.lcdui.Graphics; importjavax.microedition.lcdui.Image; //ShadowCanvas.java classShadowCanvasextendsCanvasimplementsRunnable{ intw,h; Imageimg2; ImagesrcImage; //原始图片的像素数组 int[]srcRgbImage; //渐变图片的像素数组 int[]shadowRgbImage; intimgWidth,imgHeight; intcount; privatebooleanfirst=true; publicShadowCanvas(){ w=this.getWidth(); h=this.getHeight(); try{ srcImage=Image.createImage("/logoBg.png"); img2=Image.createImage("/test_bg.png"); }catch(IOExceptione){ e.printStackTrace(); } imgWidth=srcImage.getWidth(); imgHeight=srcImage.getHeight(); //制造原始图片的像素数组,用一个int来代表每一个像素,按位表示方式是: 0xAARRGGBB srcRgbImage=newint[imgWidth*imgHeight]; //获取原始图片的所有像素,参见MIDPAPPI文档 srcImage.getRGB(srcRgbImage,0,imgWidth,0,0,imgWidth,imgHeight); shadowRgbImage=newint[srcRgbImage.length]; System.arraycopy(srcRgbImage,0,shadowRgbImage,0, shadowRgbImage.length); //渐变图片的所有像素一开始都是全透明的 for(inti=0;i shadowRgbImage[i]&=0x00ffffff; } newThread(this).start(); } publicvoidpaint(Graphicsg){ // g.setColor(0,0,0); // g.fillRect(0,0,w,h); if(first){ g.drawImage(img2,0,0,0); first=false; } //绘制渐变图片 g.drawRGB(shadowRgbImage,0,imgWidth,(w-imgWidth)/2, (h-imgHeight)/2,imgWidth,imgHeight,true); // g.setColor(0,255,0); // g.drawString("count="+count,w/2,30,Graphics.HCENTER // |Graphics.TOP); } publicvoidrun(){ while(true){ booleanchanged=false; //改变渐变图片的每一个像素 for(inti=0;i //获取渐变图片的某一像素的alpha值 intalpha=(shadowRgbImage[i]&0xff000000)>>>24; //原始图片的对应像素的alpha值 intoldAlpha=(srcRgbImage[i]&0xff000000)>>>24; if(alpha //alpha值++ 写的太精妙了把移位用到了极致 shadowRgbImage[i]=((alpha+1)<<24) |(shadowRgbImage[i]&0x00ffffff); changed=true; } } try{ Thread.sleep(10); }catch(InterruptedExceptione){ e.printStackTrace(); } count++; repaint(); //当所有像素的alpha值都达到原始值后,线程运行结束 if(! changed){ System.out.println("over"); break; } } } } 下边这个类中包含了很多这是照搬别人的尊重原创,在这写下来主要是为了日后用的时候方便 viewplaincopytoclipboardprint? ImageUtil importjavax.microedition.lcdui.*; importjavax.microedition.lcdui.game.Sprite; publicclassImageUtil { publicstaticfinalintTURN_LEFT=1; publicstaticfinalintTURN_RIGHT=2; publicint[]getPixels(Imagesrc) { intw=src.getWidth(); inth=src.getHeight(); int[]pixels=newint[w*h]; src.getRGB(pixels,0,w,0,0,w,h); returnpixels; } publicImagedrawPixels(int[]pixels,intw,inth) { Imageimage=Image.createRGBImage(pixels,w,h,true); pixels=null; returnimage; } public Imageeffect_resizeImage(Imagesrc,intdestW,intdestH) { intsrcW=src.getWidth(); intsrcH=src.getHeight(); int[]destPixels=newint[destW*destH]; int[]srcPixels=getPixels(src); for(intdestY=0;destY { for(intdestX=0;destX { intsrcX=(destX*srcW)/destW; intsrcY=(destY*srcH)/destH; destPixels[destX+destY*destW]=srcPixels[srcX+srcY *srcW]; } } returndrawPixels(destPixels,destW,destH); } publicImageeffect_light_contrast(Imagesrc,doublecontrast,intlight) { intsrcW=src.getWidth(); intsrcH=src.getHeight(); int[]srcPixels=getPixels(src); intr=0; intg=0; intb=0; inta=0; intargb; //公式y=ax+b a为对比度,b为亮度 //intpara_b =light-127*(light-1); for(inti=0;i { for(intii=0;ii { argb=srcPixels[i*srcW+ii]; a=((argb&0xff000000)>>24);//alphachannel r=((argb&0x00ff0000)>>16);//redchannel g=((argb&0x0000ff00)>>8);//greenchannel b=(argb&0x000000ff);//bluechannel r=(int)(r*contrast+light); g=(int)(g*contrast+light); b=(int)(b*contrast+light); if(r>255) r=255; elseif(r<0)r=0; if(g>255) g=255; elseif(g<0)g=0; if(b>255) b=255; elseif(b<0)b=0; srcPixels[i*srcW+ii]=((a<<24)|(r<<16)|(g<<8)|b); } } returndrawPixels(srcPixels,srcW,srcH); } publicImageeffect_mirror(Imagesrc) { intsrcW=src.getWidth(); intsrcH=src.getHeight(); int[]srcPixels=getPixels(src); intlen; inttemp; for(inti=0;i { len=(i+1)*srcW; for(intii=0;ii { temp=srcPixels[i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- j2me 图像 处理 特效