老总留给图片的操作问题,以前没接触过。
一个.bmp的图片(获得byte[]) , 用Java对这个图片的byte[] 值去操作。(是否要用awt或者swing)
通过对.bmp图片的数组操作 在此图片上 划上一个十字~~~~再保存~~~有代码最好~~~急~~~
一个.bmp的图片(获得byte[]) , 用Java对这个图片的byte[] 值去操作。(是否要用awt或者swing)
通过对.bmp图片的数组操作 在此图片上 划上一个十字~~~~再保存~~~有代码最好~~~急~~~
楼主【huangyangweiyue】截止到2008-07-09 15:16:09的历史汇总数据(不包括此帖):
发帖的总数量:16 发帖的总分数:300 每贴平均分数:18
回帖的总数量:100 得分贴总数量:15 回帖的得分率:15%
结贴的总数量:16 结贴的总分数:300
无满意结贴数:3 无满意结贴分:100
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:18.75 % 无满意结分率:33.33 %
敬礼!
http://www.cnblogs.com/toosuo/archive/2007/12/22/1010283.html
找了一篇相关的~~~就是没看懂 ~~~
高手指点下 谢过~~
给点读写的BufferedImage这个的代码看看。。
没接触过。
谢过
只会在一张图片上加点东西,比如划个十字什么的
用bufferedImage.getGraphics().drawImage方法
ImageIcon imageIcon = new ImageIcon(bytes);
BufferedImage bufferedImage=
new BufferedImage(imageIcon.getIconWidth(),imageIcon.getIconHeight(),BufferedImage.TYPE_INT_RGB);
Graphics2D g=(Graphics2D)bufferedImage.getGraphics();
FileInputStream in = new FileInputStream(filePath);
byte[] bytes = new byte[in.available()];
in.read(bytes);
in.close();
Toolkit toolkit = Toolkit.getDefaultToolkit();
image = toolkit.getImage(path);这个image 怎么转换成byte[];
private byte[] bytes;
private Image image = null;
public void getJPG(String path)
{
try {
in = new FileInputStream(path);
byte[] bytes = new byte[in.available()];
in.read(bytes);
in.close();
ImageIcon imageIcon = new ImageIcon(bytes);
BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(),imageIcon.getIconHeight(),BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D)bufferedImage.getGraphics();
//g.drawArc(x, y, width, height, startAngle, arcAngle)
g.drawImage(imageIcon, imageIcon.getIconWidth()/2, imageIcon.getIconHeight()/2, imageIcon.getIconHeight()/2, imageIcon.getIconWidth()/2, observer) } catch (FileNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
怎么去划个十字~~~~~拜托~~~~~
指定了,不要jpg的。
不知道JAVA中有没有直接对BMP图片操作的?????
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;public class ImageEditor { public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("yourImageFilePath");
FileOutputStream fos = new FileOutputStream("yourImageFilePath");
BufferedImage img = ImageIO.read(fis);
Graphics g = img.getGraphics();
g.drawLine(0, 0, 60, 60);
//你的其它绘图代码...
img.flush();
g.dispose();
ImageIO.write(img, "BMP", fos);
}}自己处理一下异常的捕获。
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.*;
import java.awt.Image;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;public class GraJPG {
private FileInputStream in = null;
private FileOutputStream out = null;
private byte[] bytes;
private Image image = null;
public void getJPG(String path)
{
try {
in = new FileInputStream(path);
out = new FileOutputStream(path);
bytes = new byte[in.available()];
in.read(bytes);
in.close();
ImageIcon imageIcon = new ImageIcon(bytes);
BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(),imageIcon.getIconHeight(),BufferedImage.TYPE_INT_RGB);
Graphics g = bufferedImage.getGraphics();
g.drawLine(20, 20, 60, 60);
bufferedImage.flush();
//g.dispose();
ImageIO.write(bufferedImage, "BMP", out);
} catch (FileNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
public static void main(String args[]){
GraJPG graJPG = new GraJPG();
graJPG.getJPG("D:\\test.jpg");
}}Exception in thread "main" java.lang.IllegalArgumentException: Width (-1) and height (-1) cannot be <= 0
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:999)
at java.awt.image.BufferedImage.<init>(BufferedImage.java:314)
at jpg.GraJPG.getJPG(GraJPG.java:26)
at jpg.GraJPG.main(GraJPG.java:44)
我在"D:\\test.jpg"路径下有图片,main方法以后 图片的内容没了 ~~~~高手指点~~ waiting...
BufferedImage bufferedImage=
new BufferedImage(imageIcon.getIconWidth(),imageIcon.getIconHeight(),BufferedImage.TYPE_INT_RGB);
Graphics2D g=(Graphics2D)bufferedImage.getGraphics();
ImageIcon imageIcon = new ImageIcon(bytes);
BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(),imageIcon.getIconHeight(),BufferedImage.TYPE_INT_RGB);
//BufferedImage image = new BufferedImage();
Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
g.drawLine(0, 0, 20, 20);
bufferedImage.flush();
//g.dispose();
ImageIO.write(bufferedImage, "BMP", out);
没区别~~~还是图片里的内容没了~~~
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;public class Test { public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("D:\\test.bmp");
FileOutputStream fos = new FileOutputStream("D:\\test.bmp");
BufferedImage img = ImageIO.read(fis);
Graphics g = img.getGraphics();
g.drawLine(0, 0, 60, 60);
//你的其它绘图代码...
img.flush();
g.dispose();
ImageIO.write(img, "BMP", fos);
}}
Exception in thread "main" java.lang.NullPointerException
at jpg.Test.main(Test.java:15)很无奈~~~~~图片里的内容没有了~~~~
BufferedImage img = ImageIO.read(new File(filePath));
int width = img.getWidth();
int h = img.getHeight();
Graphics2D g =(Graphics2D)img.getGraphics();
g.setPaintMode();
g.drawLine(0, h / 2, width, h / 2);
ImageIO.write(img,"bmp",new File(newfilePath));
用这个就行了。
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.imageio.ImageIO;public class Graph { public void getJPG(String path)
{
try {
File img = new File(path);
BufferedImage bufferedImage = ImageIO.read(img);
System.out.println(bufferedImage.getHeight());
System.out.println(bufferedImage.getWidth());
Graphics g = bufferedImage.getGraphics();
g.drawLine(20, 20, 100, 100);
bufferedImage.flush();
g.dispose();
ImageIO.write(bufferedImage, "bmp", img);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String args[]){
Graph Graph = new Graph();
Graph.getJPG("D:\\test.bmp");
}}
大图片报 内存溢出!但改了jvm内存不报错了 但不出图了!
* 图像切割
*
* @param srcImageFile
* 源图像地址
* @param descDir
* 切片目标文件夹
* @param destWidth
* 目标切片宽度
* @param destHeight
* 目标切片高度
*/
public static void cut(String srcImageFile, String descDir, int destWidth,
int destHeight) {
try {
Image img;
ImageFilter cropFilter;
// 读取源图像
System.out.println("正在加载图片请稍等....");
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getWidth(); // 源图宽度
int srcHeight =bi.getHeight(); // 源图高度
if (srcWidth > destWidth && srcHeight > destHeight) {
Image image = bi.getScaledInstance(srcWidth, srcHeight,
Image.SCALE_DEFAULT);
// destWidth = 256; // 切片宽度
// destHeight = 256; // 切片高度
int cols = 0; // 切片横向数量
int rows = 0; // 切片纵向数量
// 计算切片的横向和纵向数量
if (srcWidth % destWidth == 0) {
cols = srcWidth / destWidth;
} else {
cols = (int) Math.floor(srcWidth / destWidth) + 1;
}
if (srcHeight % destHeight == 0) {
rows = srcHeight / destHeight;
} else {
rows = (int) Math.floor(srcHeight / destHeight) + 1;
}
// 循环建立切片
// 改进的想法:是否可用多线程加快切割速度
int size=0;
int num=rows*cols;
for (int i = 0; i < rows; i++) {
//size++;
for (int j = 0; j < cols; j++) {
size++;
// 四个参数分别为图像起点坐标和宽高
// 即: CropImageFilter(int x,int y,int width,int height)
cropFilter = new CropImageFilter(j * destWidth, i * destHeight,
destWidth, destHeight);
img = Toolkit.getDefaultToolkit().createImage(
new FilteredImageSource(image.getSource(),
cropFilter));
BufferedImage tag = new BufferedImage(destWidth,
destHeight, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(img, 0, 0, null); // 绘制缩小后的图
g.dispose();
// 输出为文件
ImageIO.write(tag, "JPEG", new File(descDir
+ j + "," + i + ".jpg"));
System.out.println("已完成"+size+"/"+num+"!");
}
}
System.out.println("切割完成!");
}
} catch (Exception e) {
e.printStackTrace();
}
}