老总留给图片的操作问题,以前没接触过。
一个.bmp的图片(获得byte[]) , 用Java对这个图片的byte[] 值去操作。(是否要用awt或者swing)
通过对.bmp图片的数组操作 在此图片上 划上一个十字~~~~再保存~~~有代码最好~~~急~~~

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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 %                  
    敬礼!
      

  2.   

    没有人用Java处理过 BMP图片么?
    http://www.cnblogs.com/toosuo/archive/2007/12/22/1010283.html
    找了一篇相关的~~~就是没看懂 ~~~
    高手指点下 谢过~~
      

  3.   

    你可以先将bmp转成jpg格式,然后生成一个BufferedImage对象,之后获得对应的Graphics2D实例,然后通过它在图上画十字之后再用ImageIO.write命令将此BufferedImage保存成新的bmp文件。本来想跟你代码,但是现在我的bmp转jpg程序有点问题。
      

  4.   


    给点读写的BufferedImage这个的代码看看。。
    没接触过。
    谢过
      

  5.   

    换成byte[]?不会
    只会在一张图片上加点东西,比如划个十字什么的
    用bufferedImage.getGraphics().drawImage方法
      

  6.   


    ImageIcon imageIcon = new ImageIcon(bytes);
    BufferedImage bufferedImage=
        new BufferedImage(imageIcon.getIconWidth(),imageIcon.getIconHeight(),BufferedImage.TYPE_INT_RGB);
    Graphics2D g=(Graphics2D)bufferedImage.getGraphics();
      

  7.   

    如何获得 指定路径jpg图片的byte[] ImageIcon imageIcon = new ImageIcon(bytes);ls  这个bytes怎么传
      

  8.   


    FileInputStream in = new FileInputStream(filePath);
    byte[] bytes = new byte[in.available()];
    in.read(bytes);
    in.close();
      

  9.   


    Toolkit toolkit = Toolkit.getDefaultToolkit();
    image = toolkit.getImage(path);这个image 怎么转换成byte[];
      

  10.   

    private FileInputStream in = null;
    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();
    }


    怎么去划个十字~~~~~拜托~~~~~
      

  11.   

    ~~~无奈,现在想对指定的bmp图片操作~~ 。
    指定了,不要jpg的。
    不知道JAVA中有没有直接对BMP图片操作的?????
      

  12.   

    import java.awt.Graphics;
    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);
    }}自己处理一下异常的捕获。
      

  13.   

    package jpg;
    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...
      

  14.   

    ImageIcon imageIcon = new ImageIcon(bytes);
    BufferedImage bufferedImage=
        new BufferedImage(imageIcon.getIconWidth(),imageIcon.getIconHeight(),BufferedImage.TYPE_INT_RGB);
    Graphics2D g=(Graphics2D)bufferedImage.getGraphics();
      

  15.   


    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);
    没区别~~~还是图片里的内容没了~~~
      

  16.   

    package jpg;import java.awt.Graphics;
    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)很无奈~~~~~图片里的内容没有了~~~~
      

  17.   

    找到问题~~~~~  传.bmp图片不行~~~~  .jpg的可以。image.getWidth((ImageObserver))ImageObserver这个对象怎么传~~~~如何使用好似是图片观察者???知道Observer 观察者模式~~~这里怎么用?
      

  18.   


    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));  
     
    用这个就行了。
      

  19.   

    LZ想的太麻烦了,用不着流的,这样处理下就行了,JPG,BMP什么的都行package com.util;import java.awt.Graphics;
    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");
        }}
      

  20.   

    如何切割一张很大的图片?如100m;代码如下 能切割小图片!
    大图片报 内存溢出!但改了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();
            }
        }