java 图片处理全集

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、图片的渐变效果

(在第一张图片的基础上渐变出第二张图片)

/** ShadowCanvas.java **/

class ShadowCanvas extends Canvas implements Runnable {

int w, h;

Image img2; //原始图片

Image srcImage; //渐变图片

int[] srcRgbImage; // 原始图片的像素数组

int[] shadowRgbImage; // 渐变图片的像素数组

int imgWidth, imgHeight;

int count;

/**原始图片只画一次即可此变量记录是否是第一次画原始图片*/

private boolean first = true;

public ShadowCanvas() {

w = this.getWidth();

h = this.getHeight();

try {

srcImage = Image.createImage("/logoBg.png");

img2 = Image.createImage("/test_bg.png");

} catch (IOException e) {

e.printStackTrace();

}

imgWidth = srcImage.getWidth();

imgHeight = srcImage.getHeight();

// 制造原始图片的像素数组,用一个int来代表每一个像素,按位表示方式是:0xAARRGGBB srcRgbImage = new

int[imgWidth * imgHeight];

// 获取原始图片的所有像素,参见MIDP APPI文档

srcImage.getRGB(srcRgbImage, 0, imgWidth, 0, 0, imgWidth, imgHeight);

shadowRgbImage = new

int[srcRgbImage.length];

System.arraycopy(srcRgbImage, 0, shadowRgbImage, 0, shadowRgbImage.length); // 渐变图片的所有像素一开始都是全透明的

for (int i = 0; i < shadowRgbImage.length; i++) {

shadowRgbImage &= 0x00ffffff;

}

new Thread(this).start();

}

public void paint(Graphics g) {

// 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);

}

public void run() {

while (true) {

boolean changed = false;

// 改变渐变图片的每一个像素

for (int i = 0; i < shadowRgbImage.length; i++) {

// 获取渐变图片的某一像素的alpha值

int alpha = (shadowRgbImage & 0xff000000) >>> 24;

// 原始图片的对应像素的alpha值

int oldAlpha = (srcRgbImage & 0xff000000) >>> 24;

if (alpha < oldAlpha) {

// alpha值++ 写的太精妙了把移位用到了极致

shadowRgbImage = ((alpha + 1) << 24)

| (shadowRgbImage & 0x00ffffff);

changed = true;

}

}

try {

Thread.sleep(10);

} catch (InterruptedException e) {

e.printStackTrace();

}

count ++;

repaint();

// 当所有像素的alpha值都达到原始值后,线程运行结束

if (!changed) {

System.out.println("over");

break;

}

}

}

}

二、图片的基本处理

public class ImageUtil

{

public static final int TURN_LEFT = 1;

public static final int TURN_RIGHT = 2;

/*

*获取图片RGB数据,并返回大小为width*height大小的一维数组

*/

public int[] getPixels(Image src)

{

int w = src.getWidth();

int h = src.getHeight();

int[] pixels = new

int[w * h];

src.getRGB(pixels, 0, w, 0, 0, w, h);

return pixels;

}

/*

*将pixels[]里的数据,生成一张图片,图片宽为w,高为h

*/

public Image drawPixels(int[] pixels, int w, int h)

{

Image image = Image.createRGBImage(pixels, w, h, true);

pixels = null;

return image;

}

/*

*调整图片大小

*destW 调整后的宽,destH调整后的高

*/

public Image effect_resizeImage(Image src, int destW, int destH)

{

int srcW = src.getWidth();

int srcH = src.getHeight();

int[] destPixels = new

int[destW * destH];

int[] srcPixels = getPixels(src);

for (int destY = 0; destY < destH; ++destY)

相关文档
最新文档