1. 程式人生 > >強化JAVA圖形操作類

強化JAVA圖形操作類

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                  不想再繼續為漢語程式設計的問題浪費時間,印度的SKTN下場怎麼樣大家一目瞭然。
 
  而在我Blog發表評論的,只要是用人類語言,我都可以接受。就算有個別不用人類語言的,有空時我也會盡量幫那些生物往人類語言方向矯正。

  ——————————————————————————————

  我們都知道,微軟對其原有GDI(Graphics Device Interface)改進後形成了現在的GDI+。作為圖形裝置介面GDI的繼任者,其對GDI的很多功能都進行了優化,而且還提供了許多方便實用的附加功能。

  以此為基礎,在.Net環境下可以很輕鬆的完成一系列複雜的圖形操作。而與之相較,Java的影象介面在影象處理功能上則略顯單薄,而部分操作較之C#等還有些複雜。

  所以最近我打算在本人的loonframework專案中將一些java影象介面二次封裝,及新增部分新的功能進入。下面我公佈的,是一些在Loonframework框架中將新新增的影象處理類。當然,這些還在測試階段,最後的確定版估計會與此有較大出入,有改進意見的歡迎郵寄到我的Email:
[email protected]
。(最近挺懶的……一寫程式碼就犯困……下班只看漫畫度日……)

BaseImage.java:
   package  org.loon.framework.game.test.image;

import  java.awt.Image;

/** */ /**
 * <p>
 * Title: LoonFramework
 * </p>
 * <p>
 * Description:基礎Bitmap介面
 * </p>
 * <p>
 * Copyright: Copyright (c) 2007
 * </p>
 * <p>
 * Company: LoonFramework
 * </p>
 * 
 * 
@author chenpeng
 * @email:[email protected]
 * 
@version 0.1
 
*/

public   interface  BaseImage  ... {

    
final static int BITMAPFILEHEADER_SIZE = 14;

    
final static int BITMAPINFOHEADER_SIZE = 40;

    
abstract int getWidth();

    
abstract int getHeight();

    
abstract LColor getPixel(int x, int y);

    
/** *//**
     * 設定畫素點
     * 
     * 
@param x
     * 
@param y
     * 
@param rgb
     * 
@return
     
*/

    
abstract boolean setPixel(int x, int y, int rgb);

    
abstract boolean setPixel(int x, int y, int r, int g, int b);

    
abstract boolean setPixel(int x, int y, LColor color);

    
/** *//**
     * 移動畫素
     * 
     * 
@param dx
     * 
@param dy
     
*/

    
abstract void movePixels(int dx, int dy);

    
/** *//**
     * 清除畫素
     * 
     * 
@param rgb
     
*/

    
abstract void clear(int rgb);

    
/** *//**
     * 獲得LGraphics
     * 
     * 
@return
     
*/

    
abstract LGraphics getLGraphics();

    
abstract Image getImage();

    
/** *//**
     * 設定指定x,y交集
     * 
     * 
@param x
     * 
@param y
     * 
@return
     
*/

    
abstract boolean setTransparent(int x, int y);

    
/** *//**
     * 設定指定color出現處
     * 
     * 
@param val
     
*/

    
abstract void setTransparent(LColor color);

    
/** *//**
     * 替換指定顏色
     * 
     * 
@param color1
     * 
@param color2
     
*/

    
abstract void setDisplace(LColor color1, LColor color2);

    
/** *//**
     * 儲存自身到指定路徑
     * 
     * 
@param path
     
*/

    
abstract void save(String path);

    
/** *//**
     * 儲存影象到指定路徑
     * 
     * 
@param image
     * 
@param path
     
*/

    
abstract void save(Image image, String path);

    
/** *//**
     * 儲存影象到指定路徑為指定大小
     * 
     * 
@param image
     * 
@param path
     * 
@param width
     * 
@param height
     
*/

    
abstract void save(Image image, String path, int width, int height);

}


LColor.java: package  org.loon.framework.game.test.image;
/** */ /**
 * <p>Title: LoonFramework</p>
 * <p>Description:loonframework用color</p>
 * <p>Copyright: Copyright (c) 2007</p>
 * <p>Company: LoonFramework</p>
 * 
@author chenpeng  
 * @email:[email protected] 
 * 
@version 0.1
 
*/

public   class  LColor  ... {
    
    
    
int R=0;
    
int G=0;
    
int B=0;
    
    
public LColor()...{}
    
    
/** *//**
     * 注入r,g,b數值
     * 
@param r
     * 
@param g
     * 
@param b
     
*/

    
public LColor(int r,int g,int b)...{
        
this.R=r;
        
this.G=g;
        
this.B=b;
    }

}

LGraphics:

package  org.loon.framework.game.test.image;

import  java.awt.Color;
import  java.awt.Font;
import  java.awt.FontMetrics;
import  java.awt.Graphics;
import  java.awt.Polygon;
import  java.awt.font.LineMetrics;

import  org.loon.framework.game.test.image.BaseImage;

/** */ /**
 * <p>Title: LoonFramework</p>
 * <p>Description:loonframework用graphics,開發中……</p>
 * <p>Copyright: Copyright (c) 2007</p>
 * <p>Company: LoonFramework</p>
 * 
@author chenpeng  
 * @email:[email protected] 
 * 
@version 0.1
 
*/

public   class  LGraphics  ... {

    Graphics _g 
= null;

    Font _font;

    
public LGraphics() ...{
        _font 
= new Font(null, Font.PLAIN, 12);
    }


    
public LGraphics(Graphics g) ...{

        _font 
= new Font(null, Font.PLAIN, 12);

        setGraphics(g);

    }


    
public void setGraphics(Graphics g) ...{

        _g 
= g;

        _g.setFont(_font);

    }


    
public void setRGB(int rgb) ...{

        _g.setColor(
new Color(rgb));

    }


    
public void setRGB(int r, int g, int b) ...{

        
int rgb = (r << 16| (g << 8| b;

        _g.setColor(
new Color(rgb));

    }


    
public void drawLine(int x1, int y1, int x2, int y2, int rgb) ...{

        setRGB(rgb);

        _g.drawLine(x1, y1, x2, y2);

    }


    
public void drawRect(int x, int y, int width, int height) ...{
        _g.drawRect(x, y, width, height);
    }


    
public void drawRect(int x, int y, int width, int height, int rgb) ...{

        setRGB(rgb);

        _g.drawRect(x, y, width, height);

    }


    
public void fillRect(int x, int y, int width, int height) ...{
        _g.fillRect(x, y, width, height);
    }


    
public void fillRect(int x, int y, int width, int height, int rgb) ...{

        setRGB(rgb);

        _g.fillRect(x, y, width, height);

    }


    
public void fillTriangle(int x1, int y1, int x2, int y2, int x3, int y3) ...{

        
if (_g == null...{
            
return;
        }


        Polygon p 
= new Polygon();

        p.addPoint(x1, y1);
        p.addPoint(x2, y2);
        p.addPoint(x3, y3);

        _g.fillPolygon(p);

    }


相關推薦

強化JAVA圖形操作

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

JAVA 原子操作

上文中,guava程式碼中就用到了,在這裡再專門捋一下 部分內容源自: https://www.jianshu.com/p/712681f5aecd https://www.yiibai.com/java_concurrency/concurrency_atomiclong.html Atomi

java反射操作方法與屬性

package com.fanshe.test; public class User { private int age; private String email; private String username; public User() {

java日期操作

Java.util.Date //java.util.Date與long轉換 Date date=new Date();//得到當前系統時間 System.out.println(date);//Thu Nov 22 19:21:12 CST 2018 long time = date.

Java集合操作Collections的一些常用方法

public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); list.add(34);

java反射操作結構(二)

java反射操作類結構 反射操作構造方法 Class只是作為反射的操作源頭,但是嚴格來講,反射還有其他內容。反射給使用者最大的方便有三點: 1.構造呼叫 2.方法呼叫 3.屬性呼叫 在反射機制裡面提供有java.lang.reflect包,包中最重

Java 原子操作詳解(AtomicInteger、AtomicIntegerArray等)

當程式更新一個變數時,如果多執行緒同時更新這個變數,可能得到期望之外的值,比如變數i=1,A執行緒更新i+1,B執行緒也更新i+1,經過兩個執行緒操作之後可能i不等於3,而是等於2。因為A和B執行緒在更新變數i的時候拿到的i都是1,這就是執行緒不安全的更新操作,通常我們會使

使用java反射操作的建構函式,成員變數和成員方法

在java.lang.reflect包中有三個類Field,Method,Constructor.分別描述域,方法,構造器。參考API,關於這三個類的說明。 在執行時使用反射分析物件,如果訪問的是私有域或是私有方法,私有建構函式,會丟擲IllegalAccessExce

Java 檔案操作操作目錄)

·列出目錄下的資訊:public String[ ] list();·列出所有的資訊以File類物件包裝:public File [ ] listFiles();範例1:列出資訊import java.

java原子操作-原子陣列

java還提供了通過原子方式更新數組裡的某個元素,Atomic包提供了以下4個類。 AtomicIntegerArray:原子更新整型數組裡的元素 AtomicLongArray:原子更新長整型數組裡的元素 AtomicReferenceArray:原子更新引用型別數組裡的

非常實用的Java檔案操作

import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java

java入門(型轉換、字符串操作等)

過程 boolean ava 字符串 符號 兩個 uppercase rim 算術 java基礎數據類型:不能=null;  四類八種:     整數型:       byte 2的8次方       short 2的16次方      int 2的32次方  

java中RandomAccessFile的作用:對指定文件可以進行讀寫的操作

cnblogs 讀寫 acc com ces 作用 分享 進行 .com 在java中RandomAccessFile類的作用:對指定文件可以進行讀寫的操作

Java中Properties操作

文件中 配置文件 所有 技術分享 set nbsp str 宋體 java Java中有個比較重要的類Properties(Java.util.Properties),主要用於讀取Java的配置文件,就是像讀取數據庫賬號密碼一樣,其配置文件常為.properties文件,格

Java中Cookie常用操作(Spring中操作Cookie)

方法 .net str blog .cn shm efault csdn int 說明:Cookie下用Key取值沒有快速的方法,只能便利循環去取。 import java.util.HashMap; import java.util.Map; import

java圖形驗證碼生成工具及web頁面校驗驗證碼

組合 line des resp word buffere 需要 case ali 最近做驗證碼,參考網上案例,發現有不少問題,特意進行了修改和完善。驗證碼生成器:[ht

Java文件操作效率對比

字符 name mem http .get space data args 內容 前言 眾所周知,Java中有多種針對文件的操作類,以面向字節流和字符流可分為兩大類,這裏以寫入為例: 面向字節流的:FileOutputStream 和 BufferedOutputStr

重學java---3---有關時間的操作

java中有關時間的類如下: 1. java.util.Date //程式碼精確到毫秒的時間例項 2. java.sql.Time //資料庫操作時用 3. java.sql.Timestamp //資料庫操作時用 4. java.sql.Date //資料庫操作的時間 5. ja

java併發之原子操作(AtomicLong原始碼分析)和非阻塞演算法

  背景 近年來,在併發演算法領域的大多數研究都側重於非阻塞演算法,這種演算法用底層的原子機器指令(例如比較併發交換指令)代替鎖來確保資料在併發訪問中的一致性。非阻塞演算法被廣泛的用於在作業系統和JVM中實現執行緒/程序排程機制、垃圾回收機制以及鎖和其他併發資料結構。 與基於鎖

Java操作檔案的——File

操作檔案的類——File File類的基本介紹 Public File(String pathname)——>例項化File類時,必須設定好路徑 序號: 方法或常量 型別 描述 1