/** * 创建灰度图像(J2ME中只支持PNG格式图片),内存空间足够时调用此方法 * * @param pic 源图片 * @param srcX 处理块在源图片中的X偏移 * @param srcY 处理块在源图片中的Y偏移 * @param w 处理块宽度 * @param h 处理块高度 * @return */ public static Image createGray(Image pic, int srcX, int srcY, int w, int h) { int[] rgbData = new int[w * h]; pic.getRGB(rgbData, 0, w, srcX, srcY, w, h); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnGray(rgbData[i]); } return Image.createRGBImage(rgbData, w, h, true); }
/** * 绘制灰度变换图像(J2ME中只支持PNG格式图片),内存空间足够时调用此方法 * * @param g * @param pic 源图片 * @param srcX 绘制块在源图片的X偏移 * @param srcY 绘制块在源图片的Y偏移 * @param w 绘制宽度 * @param h 绘制高度 * @param destX 显示的X坐标 * @param destY 显示的Y坐标 */ public static void drawGray( SGraphics g, Image pic, int srcX, int srcY, int w, int h, int destX, int destY) { int[] rgbData = new int[w * h]; Image grayImg; pic.getRGB(rgbData, 0, w, srcX, srcY, w, h); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnGray(rgbData[i]); } grayImg = Image.createRGBImage(rgbData, w, h, true); g.drawImage(grayImg, destX, destY, 0); }
/** * 逐行绘制灰度变换图像(J2ME中只支持PNG格式图片),内存不够时调用次方法,绘制效率偏低 * * @param g * @param pic 源图片 * @param srcX 绘制块在源图片的X偏移 * @param srcY 绘制块在源图片的Y偏移 * @param w 绘制宽度 * @param h 绘制高度 * @param destX 显示的X坐标 * @param destY 显示的Y坐标 */ public static void drawGrayByLine( SGraphics g, Image pic, int srcX, int srcY, int w, int h, int destX, int destY) { int[] rgbData = new int[w]; for (int hd = h - 1; hd >= 0; --hd) { pic.getRGB(rgbData, 0, w, srcX, srcY + hd, w, 1); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnGray(rgbData[i]); } g.drawRGB(rgbData, 0, w, destX, destY + hd, w, 1, true); } }