|
此次真的好多天没有更新啦!!主要是由于这几天一直在同时做五子棋和图形的措置,如何五子棋此刻还没有做出人机对战,不外过2天应该就可以了!到时候就可以发出来给大师看了。虽然五子棋已经差不多了,个此次我的主要目的还是和大师聊一下我做出来的图形图像与措置。此次我做出来的效果不多,不外了解了这些效果以后,相信大师应该对图形的措置的各种情况就有了本身的一个了解,只要有了想象力,相信很多效果都是可以做出来的。先让大师看一下我的各种效果吧。
大致效果就是这样了!而我们要做一个这样的图像措置,首先要做的相信大师应该都知道,就是做一个界面,一个如上图所示的界面。做完界面后,当然就需要一个原图,由于这里我是没有设置还原这一按钮的,所以我把原图加在了最初的页面上:
加上了原图之后,就要开始做特效了,首先我们面临的问题就是:怎么让Java可以对图片进行操作?这个问题我想了很久,也本身在百度上找了方式,首先我们要透过事物的本质去对待问题,那么我们要操作的图片的本质是什么呢?本质就是图片是由一个个二维数组的点来构成的。那么怎么对图片进行措置呢?将图片转化为二维数组,然后对二维数组里的每个像素点进行各种操作,以达到对图片操作的目的。
了解了图片的本质之后,那么怎么将图片转换为二维数组呢?
代码如下:
public void getImagePixel(){
File file = new File(”F:\\我的文档\\图片\\ima.jpg”);
BufferedImage bi = null;
try {
bi = ImageIO.read(file);
} catch (Exception e) {
e.printStackTrace();
}
//得到图片像素的宽和高
w = bi.getWidth();
h = bi.getHeight();
imIndex = new int[w][h];
System.out.println(”w=” + w + ” h=” + h );
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
//i,j位置的Color值
pixel = bi.getRGB(i, j);
//输出每一个像素点的color
imIndex[j]=pixel;
}
}
}
完成了图片与数组的转换,接下来就是对这个二维数组进行操作了,我具体是设置了这么几个特效:“拉长”,”缩小”,”扩大”,”黑白”,”马赛克”,”帅气的变色”,”素描”,”刷白”,”刷黑”,”戴绿帽”,操作方式如下:
public void getImagePixel(){
File file = new File(”F:\\我的文档\\图片\\ima.jpg”);
BufferedImage bi = null;
try {
bi = ImageIO.read(file);
} catch (Exception e) {
e.printStackTrace();
}
//得到图片像素的宽和高
w = bi.getWidth();
h = bi.getHeight();
imIndex = new int[w][h];
System.out.println(”w=” + w + ” h=” + h );
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
//i,j位置的Color值
pixel = bi.getRGB(i, j);
//输出每一个像素点的color
imIndex[j]=pixel;
}
}
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals(”拉长”)){
getImagePixel();
System.out.println(”zhi”);
for (int i = 0; i <w; i++) {
for (int j = 0; j <h; j++) {
c=imIndex[j];
Color color=new Color(c);
gr.setColor(color);
gr.drawOval(i*2, j, 1, 1);
}
}
}
if(e.getActionCommand().equals(”缩小”)){
getImagePixel();
System.out.println(”zhi”);
for (int i = 0; i <w; i++) {
for (int j = 0; j <h; j++) {
c=imIndex[j];
Color color=new Color(c);
gr.setColor(color);
gr.drawOval(i/2+140, j/2+80, 1, 1);
}
}
}
if(e.getActionCommand().equals(”扩大”)){
getImagePixel();
System.out.println(”zhi”);
for (int i = 0; i <w; i++) {
for (int j = 0; j <h; j++) {
c=imIndex[j];
Color color=new Color(c);
gr.setColor(color);
gr.drawOval(i*2, j*2, 1, 1);
}
}
}
if(e.getActionCommand().equals(”黑白”)){
getImagePixel();
System.out.println(”zhi”);
for (int i = 0; i <w; i++) {
for (int j = 0; j <h; j++) {
c=imIndex[j];
c=Math.abs(c);
Color color=new Color(c%255,c%255,c%255);
gr.setColor(color);
gr.drawOval(i+140, j+80, 1, 1);
}
}
}
if(e.getActionCommand().equals(”马赛克”)){
getImagePixel();
System.out.println(”zhi”);
for (int i = 0; i <w; i=i+10) {
for (int j = 0; j <h; j=j+10) {
c=imIndex[j];
Color color=new Color(c);
gr.setColor(color);
gr.fillRect(i+140, j+80, 10, 10);
}
}
}
if(e.getActionCommand().equals(”帅气的变色”)){
getImagePixel();
System.out.println(”zhi”);
for (int i = 0; i <w; i++) {
for (int j = 0; j <h; j++) {
c=imIndex[j];
c=Math.abs(c);
Color color=new Color(c%255,0,0);
gr.setColor(color);
gr.drawOval(i+140, j+80, 1, 1);
}
}
for (int i = 0; i <w; i++) {
for (int j = 0; j <h; j++) {
c=imIndex[j];
c=Math.abs(c);
Color color=new Color(c%255,c%255,0);
gr.setColor(color);
gr.drawOval(i+140, j+80, 1, 1);
}
}
for (int i = 0; i <w; i++) {
for (int j = 0; j <h; j++) {
c=imIndex[j];
c=Math.abs(c);
Color color=new Color(0,c%255,0);
gr.setColor(color);
gr.drawOval(i+140, j+80, 1, 1);
}
}
for (int i = 0; i <w; i++) {
for (int j = 0; j <h; j++) {
c=imIndex[j];
c=Math.abs(c);
Color color=new Color(0,c%255,c%255);
gr.setColor(color);
gr.drawOval(i+140, j+80, 1, 1);
}
}
}
if(e.getActionCommand().equals(”素描”)){
getImagePixel();
System.out.println(”zhi”);
for (int i = 0; i <w; i++) {
for (int j = 0; j <h; j++) {
c=imIndex[j];
Color color=new Color(c);
gr.setColor(color);
c=Math.abs(c);
if(c%255>200){
gr.drawOval(i+140, j+80, 1, 1);
}
}
}
}
if(e.getActionCommand().equals(”刷白”)){
getImagePixel();
System.out.println(”zhi”);
for (int i = 0; i <w; i++) {
for (int j = 0; j <h; j++) {
c=imIndex[j];
c=Math.abs(c);
Color color=new Color(255,255,255);
gr.setColor(color);
gr.drawOval(i+140, j+80, 1, 1);
}
}
}
if(e.getActionCommand().equals(”刷黑”)){
getImagePixel();
System.out.println(”zhi”);
for (int i = 0; i <w; i++) {
for (int j = 0; j <h; j++) {
c=imIndex[j];
c=Math.abs(c);
Color color=new Color(0,0,0);
gr.setColor(color);
gr.drawOval(i+140, j+80, 1, 1);
}
}
}
if(e.getActionCommand().equals(”戴绿帽”)){
Color color=new Color(0,255,0);
gr.setColor(color);
gr.fillOval(210, 80, 300, 80);
}
}相信大师看到了代码后就会很清楚图形图像的措置是如何完成的了,其实就是对二维数组的点用分歧的方式画出来,让后用分歧的条件语句来控制一下它的颜色,以达到对图像进行分歧的措置效果。
看完之后相信大师对图形图像的措置已经有了必然的了解和认识,对本身想做的图像也大致有了一个雏形吧,不多说了,我要去研究我的五子棋了!! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|