最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)抖音代碼舞源碼

 更新時(shí)間:2019年04月11日 10:18:24   作者:cole_白  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)抖音代碼舞的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java實(shí)現(xiàn)抖音代碼舞源碼,供大家參考,具體內(nèi)容如下

Client.java

package com.dance;

import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
/**
 * //gif圖片路徑,推薦使用像素在400*400以內(nèi)的
 * //gif圖片生成路徑,這里沒有整合AnimatedGifEncoder包
 * //所以生成的是一些jpg圖片,需要自己借助其他工具整個(gè)成gif
 * //如果有條件可以繼續(xù)改進(jìn),直接生成一個(gè)gif文件
* @ClassName: Client 
* @Description: TODO(這里用一句話描述這個(gè)類的作用) 
* @author baitp 
* @date 2018年12月27日 
*
 */
public class Client {

 public static String input = "2.gif"; 
 public static String output = "D://charGif//"; 
 public static void main(String[] args) {
 EventQueue.invokeLater(new Runnable() {
 
 @Override
 public void run() {
 MainFrame mainFrame = new MainFrame();
 //創(chuàng)建并添加菜單欄
  JMenuBar menuBar = new JMenuBar();
  JMenu menuFile = new JMenu("GIF圖片");
  menuBar.add(menuFile);
  JMenuItem itemSave = new JMenuItem("上傳");
//  itemSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); 
  menuFile.add(itemSave);
  mainFrame.setJMenuBar(menuBar);
 mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 mainFrame.setVisible(true);
 itemSave.addActionListener(new ActionListener() {
 @Override
 public void actionPerformed(ActionEvent e) {
 JFileChooser fd = new JFileChooser();
 //fd.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
 fd.showOpenDialog(null);
 fd.setFileSelectionMode(0);
 File f = fd.getSelectedFile();
 String url =Client.class.getClassLoader().getResource("").getFile()+"image/"+f.getName();
 File outfile = new File(url);
 try {
 FileInputStream fi = new FileInputStream(f);
 FileOutputStream out =new FileOutputStream(outfile);
 //創(chuàng)建搬運(yùn)工具
   byte datas[] = new byte[1024*8];
   //創(chuàng)建長度
   int len = 0;
   //循環(huán)讀取數(shù)據(jù)
   while((len = fi.read(datas))!=-1){
   out.write(datas,0,len);
   }
   Client.input=f.getName();
   //3.釋放資源
   fi.close();
   out.close();
 } catch (Exception e1) {
 e1.printStackTrace();
 }
 }
 });
 }
 });
 }
}

@SuppressWarnings("serial")
class MainFrame extends JFrame {
 private int x;
 private int y;
 public static int WIDTH = 0;
 public static int HEIGHT = 0;
 {
 Toolkit kit = Toolkit.getDefaultToolkit();
 int screen_width = kit.getScreenSize().width;
 int screen_height = kit.getScreenSize().height;
 x = (screen_width-WIDTH)/2;
 y = (screen_height-HEIGHT)/2;
 }
 public MainFrame() {
 setTitle("intlstar code dance 666");
 initBounds();
 createGIF();
 setBounds(x, y, WIDTH, HEIGHT);
 setResizable(false);
 setIconImage(null);
 
 JPanel panel = new GamePanel();
 Container container = getContentPane();
 container.add(panel);
 }
 //將字符圖片輸出到指定目錄
 public void createGIF() {
 BufferedImage[] charImgs = ImgToCharacter.getCharImgs();
 try {
 for (int i=0; i<charImgs.length; i++) {
 File file = new File(Client.class.getClassLoader().getResource("").getFile()+"chargif/"+i+".jpg");
 ImageIO.write(charImgs[i], "jpg", file);
 }
 } catch (IOException e) {
 e.printStackTrace();
 }
 System.out.println("圖片輸出完成!");
 }
 public void initBounds() {
 ImgToCharacter.readGiF();
 ImgToCharacter.draw();
 BufferedImage[] charImgs = ImgToCharacter.getCharImgs();
 int max_width = 0;
 int max_height = 0;
 for (BufferedImage img : charImgs) {
 if(img.getWidth() > max_width)
 max_width = img.getWidth();
 if(img.getHeight() > max_height)
 max_height = img.getHeight();
 }
 WIDTH = max_width;
 HEIGHT = max_height;
 }
}

GamePanel.java

package com.dance;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

import javax.swing.JPanel;

@SuppressWarnings("serial")
public class GamePanel extends JPanel{

 private int fps = 6;
 private BufferedImage[] charImgs;
 int count = 0;
 private BufferedImage background = null;
 public GamePanel() {
 charImgs = ImgToCharacter.getCharImgs();
 initBackgroudImg();
 Thread t = new MyThread();
 t.start();
 }
 public void initBackgroudImg() {
 background = new BufferedImage(MainFrame.WIDTH, MainFrame.HEIGHT, BufferedImage.TYPE_INT_RGB);
 Graphics gb = background.getGraphics();
 gb.setColor(Color.white);
 gb.fillRect(0, 0, background.getWidth(), background.getHeight());
 gb.dispose();
 }
 @Override
 public void paint(Graphics g) {
 super.paint(g);
 int size = charImgs.length;
 int index = count % size;
 BufferedImage img = charImgs[index];
 int w = img.getWidth();
 int h = img.getHeight();
// int x = (MainFrame.WIDTH - w)/2;
// int y = (MainFrame.HEIGHT - h)/2;
 //背景涂白
 g.setColor(Color.white);
 g.fillRect(0, 0, MainFrame.WIDTH, MainFrame.HEIGHT);
 g.setColor(Color.black);
 // 3/4為顯示比例,考慮到有的gif圖片太大,所以縮小至一定比例在窗口中顯示
 g.drawImage(img, 0, MainFrame.HEIGHT - h,w*3/4, h*3/4, null);
 count++;
 }
 
 class MyThread extends Thread {

 long startTime;
 long endTime;
 long sleepTime;
 long spendTime;
 long period = 1000/fps;
 @Override
 public void run() {
 while(true) {
 startTime = System.currentTimeMillis();
 repaint();
 endTime = System.currentTimeMillis();
 spendTime = endTime - startTime;
 sleepTime = period - spendTime;
 if(sleepTime < 0)
 sleepTime = 2;
 try {
 Thread.sleep(sleepTime);
 } catch (InterruptedException e) {
 e.printStackTrace();
 }
 
 }
 }
 
 }
}

ImgToCharacter.java

package com.dance;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

public class ImgToCharacter {

 private static BufferedImage[] realImgs;
 private static BufferedImage[] charImgs;
 private static int size = 4;
 private static String[] chars= {" ",".",":",";","-","~","1","i","o","r","a",
  "2","c","3","b","n","q","k","x","S","X",
  "7","Z","O","8","#","$","%","&","M","B",
  "W","@","@"};
 
 public static void draw() {
 int interval = 16777215 / (chars.length-1) ;
 BufferedImage oneRealImg = null;
 int index = 0;
 while(index < realImgs.length) {
 oneRealImg = realImgs[index];
 int width = oneRealImg.getWidth();
 int height = oneRealImg.getHeight();
 BufferedImage oneCharImg = new BufferedImage(width*3, height*3,BufferedImage.TYPE_INT_RGB);
 Graphics g = oneCharImg.getGraphics();
 g.setColor(Color.WHITE);
 g.fillRect(0, 0, oneCharImg.getWidth(), oneCharImg.getHeight());
 g.setColor(Color.BLACK);
 g.setFont(new Font("黑體", Font.BOLD, 15));
 
 for(int i= 0 ; i < height ; i+=size){ 
 for(int j = 0 ; j < width; j+=size){ 
  int rgb = getAvgRGB(j, i, oneRealImg);
 int k = rgb/interval; 
 g.drawString(chars[k], 12*j/size, 12*i/size);
 }
 }
 g.dispose();
 charImgs[index] = oneCharImg;
 index++;
 }
 
 }
 public static void readGiF() {
 try {
 System.out.println(ImgToCharacter.class.getClassLoader().getResource("").getFile());
 File f = new File(ImgToCharacter.class.getClassLoader().getResource("").getFile()+"image/"+Client.input);
 String name = f.getName();
 String suffix = name.substring(name.lastIndexOf('.')+1);
 
 Iterator<ImageReader> iter = ImageIO.getImageReadersBySuffix(suffix);
 ImageReader reader = iter.next();
 ImageInputStream imageIn;
 imageIn = ImageIO.createImageInputStream(f);
 reader.setInput(imageIn);
 int count = reader.getNumImages(true);
 realImgs = new BufferedImage[count];
 charImgs = new BufferedImage[count];
 for(int i=0; i< count; i++) {
 realImgs[i] = reader.read(i);
 }
 
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 public static BufferedImage[] getCharImgs() {
 return charImgs;
 }
 public static int getAvgRGB(int i, int j, BufferedImage img) {
 int result = 0;
 for(int m=0; m<size; m++) {
 for(int n=0; n<size; n++) {
 if(i+m < img.getWidth() && j+n < img.getHeight())
 result += img.getRGB(i+m, j+n);
 }
 }
 return Math.abs(result) / (size*size);
 }

}

完整源碼下載地址:代碼舞

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java 讀取文件路徑空格、

    java 讀取文件路徑空格、"+"和中文的處理方法

    今天小編就為大家分享一篇java 讀取文件路徑空格、"+"和中文的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 關(guān)于Java項(xiàng)目讀取resources資源文件路徑的那點(diǎn)事

    關(guān)于Java項(xiàng)目讀取resources資源文件路徑的那點(diǎn)事

    這篇文章主要介紹了關(guān)于Java項(xiàng)目讀取resources資源文件路徑的那點(diǎn)事,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 關(guān)于intellij idea打開就閃退或關(guān)閉詳細(xì)解決辦法

    關(guān)于intellij idea打開就閃退或關(guān)閉詳細(xì)解決辦法

    這篇文章主要介紹了關(guān)于intellij idea打開就閃退或關(guān)閉詳細(xì)解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • java版實(shí)現(xiàn)2048游戲功能

    java版實(shí)現(xiàn)2048游戲功能

    這篇文章主要為大家詳細(xì)介紹了java版實(shí)現(xiàn)2048游戲功能,相加數(shù)字出現(xiàn)2048即可,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java數(shù)據(jù)結(jié)構(gòu)之順序表篇

    Java數(shù)據(jù)結(jié)構(gòu)之順序表篇

    順序表,全名順序存儲(chǔ)結(jié)構(gòu),是線性表的一種。線性表用于存儲(chǔ)邏輯關(guān)系為“一對(duì)一”的數(shù)據(jù),順序表自然也不例外,不僅如此,順序表對(duì)數(shù)據(jù)物理存儲(chǔ)結(jié)構(gòu)也有要求。順序表存儲(chǔ)數(shù)據(jù)時(shí),會(huì)提前申請(qǐng)一整塊足夠大小的物理空間,然后將數(shù)據(jù)依次存儲(chǔ)起來,存儲(chǔ)時(shí)數(shù)據(jù)元素間不留縫隙
    2022-01-01
  • Spring Boot實(shí)現(xiàn)發(fā)送郵件

    Spring Boot實(shí)現(xiàn)發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了Spring Boot實(shí)現(xiàn)發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • java網(wǎng)上圖書商城(7)訂單模塊2

    java網(wǎng)上圖書商城(7)訂單模塊2

    這篇文章主要為大家詳細(xì)介紹了java網(wǎng)上圖書商城,訂單模塊第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Java如何求交集、并集、差集

    Java如何求交集、并集、差集

    這篇文章主要介紹了Java如何求交集、并集、差集問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 通過實(shí)例分析java多態(tài)

    通過實(shí)例分析java多態(tài)

    這篇文章主要介紹了通過實(shí)例分析java多態(tài),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java?Zookeeper分布式分片算法超詳細(xì)講解流程

    Java?Zookeeper分布式分片算法超詳細(xì)講解流程

    ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個(gè)為分布式應(yīng)用提供一致性的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等
    2023-03-03

最新評(píng)論

靖江市| 江川县| 富宁县| 辰溪县| 慈溪市| 金沙县| 永昌县| 洪江市| 手游| 开原市| 安仁县| 睢宁县| 丹阳市| 潮安县| 黔南| 东丰县| 图片| 康马县| 韶山市| 华坪县| 射阳县| 望城县| 电白县| 湘潭县| 喀什市| 且末县| 长顺县| 榆社县| 浦北县| 丹凤县| 永寿县| 鄂托克前旗| 南和县| 鄯善县| 个旧市| 灯塔市| 松潘县| 额济纳旗| 新田县| 天水市| 寿阳县|