以矩阵的形式将照片转换为照片

时间:2017-05-09 12:14:32

标签: java

我写了下面的代码,但照片必须是矩阵的形式,而不是并排。

我的目标不是在画布的末尾留下任何空白区域。



import java.awt.Color;
public class aaa {
    public static Color karstr ( Color x,Color y,double lambda ){
        int r= (int)((1-lambda)*x.getRed()+lambda*y.getRed());
        int g= (int)((1-lambda)*x.getGreen()+lambda*y.getGreen());
        int b= (int)((1-lambda)*x.getBlue()+lambda*y.getBlue());

        return new Color (r,g,b);
    }

    public static void main(String[] args) {
        int genilik =50;
        int ykseklik=100;
        Picture p=new Picture("c:/data/a.jpg");
        Picture q=new Picture("c:/data/b.jpg");
        Picture r= new Picture(p.width()+400,p.height()+10);

        for (int i = 0; i < p.width(); i++)
            for (int j = 0; j < p.height(); j++) {
                Color x=p.get(i, j);
                Color y=q.get(i,j);

                r.set(i*genilik/p.width(),j*ykseklik/p.height(), x);
                Color c=karstr(x,y,(double)1/5);
                r.set(i*genilik/p.width()+50,j*ykseklik/p.height(), c);
                Color a=karstr(x,y,(double)1/4);
                r.set(i*genilik/p.width()+100,j*ykseklik/p.height(),a);
                Color b=karstr(x,y,(double)1/3);
                r.set(i*genilik/p.width()+150,j*ykseklik/p.height(),b);
                Color f=karstr(x,y,(double)1/2);
                r.set(i*genilik/p.width()+200,j*ykseklik/p.height(),f);
                Color g=karstr(x,y,(double)1/1.2);
                r.set(i*genilik/p.width()+250,j*ykseklik/p.height(),g);
                r.set(i*genilik/p.width()+300,j*ykseklik/p.height(), y);
            }
        r.show();
    }
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

import java.awt.Color;
public class PhotoTransformation {
  private Picture source;
  private Picture dest;

  public PhotoTransformation(Picture source, Picture dest) {
    source = source;
    dest = dest;
  }

  public static void main(String[] args) {
    Picture p=new Picture("c:/data/a.jpg");
    Picture q=new Picture("c:/data/b.jpg");

    PhotoTransformation photoTransformation = new PhotoTransformation(p, q);
    Picture[] photoSeries = photoTransformation.produceTransformationPhotos(8);

    // Show the photos

  }

  public Picture[] produceTransformationPhotos(int transitionPhotoNumber) {
    int photoNumber = transitionPhotoNumber + 2;
    Picture[] photos = new Picture[photoNumber];

    int width = source.width();
    int height = source.height();

    for (int p = 0; p < photoNumber; p++) {
      Picture newPhoto = new Picture(width, height);
      photos[p] = newPhoto;

      for (int i = 0; i < width; i++) {
        for (int j = 0; j < height; j++) {
          Color sourceColor = source.get(i, j);
          Color destColor   = dest.get(i, j);
          double weight = (double) p / (double) (photoNumber - 1);

          Color transformationColor = produceWeightedMeanColor(sourceColor, destColor, weight);
          newPhoto.set(i, j, transformationColor);
        }
      }
    }

    return photos;
  }

  private static Color produceWeightedMeanColor(Color x, Color y, double weight) {
    int r = (int)((1-weight) * x.getRed()   + weight * y.getRed());
    int g = (int)((1-weight) * x.getGreen() + weight * y.getGreen());
    int b = (int)((1-weight) * x.getBlue()  + weight * y.getBlue());

    return new Color(r,g,b);
  }
}