婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Java應用程序中創建圖像

Java應用程序中創建圖像

熱門標簽:黃石智能營銷電銷機器人效果 電話機器人的特色和創新 地圖標注人員兼職 漯河辦理400電話 淮南騰訊地圖標注 怎樣把地圖標注出來 商丘百應電話機器人有沒有效果 騰訊地圖標注商戶改名注冊入駐 開封便宜外呼系統報價
合成圖像

  您不必從文件中讀取所有的圖像 — 您可以創建自己的圖像。要創建自己的圖像,最靈活的方法是用一個 BufferedImage 對象,它是 Image 類的一個子類,它把圖像數據存儲在一個可以被訪問的緩沖區中。它還支持各種存儲像素數據的方法:使用或不使用 alpha 通道、不同種類的顏色模型以及顏色組件的各種精確度。ColorModel 類提供一種靈活的方法定義各種顏色模型,以和 BufferedImage 對象一起使用。為了理解顏色模型工作的基本知識,我們將只使用一個缺省的顏色模型,其顏色組件由 RGB 值和一個緩沖類型(存儲 8 位的 RGB 顏色值加上一個 alpha 通道)組成。這一緩沖類型由 BufferedImage 類中的常量 TYPE_INT_ARGB 指定,它意味著每個像素要用一個 int 值。每個像素的值是以 8 位字節形式存儲一個 alpha 組件加上 RGB 顏色組件。我們可以用給定的寬度和高度創建一個這種類型的 BufferedImage 對象,代碼語句如下:

  int width = 200;
  int height = 300;
  BufferedImage image = new BufferedImage(width,
  height,BufferedImage.TYPE_INT_ARGB);

  這段代碼創建了一個 BufferedImage 對象,它代表一個 200 像素寬、300 像素高的圖像。為了應用這個圖像,我們需要有圖形上下文,而 BufferedImage 對象的 createGraphics() 方法就返回一個與該圖像相關的 Graphics2D 對象:

  int width = 200;
  Graphics2D g2D = image.createGraphics();

  使用 g2D 對象的操作會修改 BufferedImage 對象 image 的像素。利用這個對象,您現在完全有能力應用 BufferedImage 對象。您可以繪制形狀、圖像、GeneralPath 對象或任何別的東西,還可以為圖形上下文設置 alpha 組合對象。您同時還擁有 Graphics2D 對象提供的全部仿射變形能力。

  如果要從 BufferedImage 對象獲取單個像素,可以通過調用它的 getRGB() 方法,并提供該像素的 x,y 坐標作為 int 類型的參數。這個像素會按 TYPE_INT_ARGB 格式以 int 類型返回,它由四個 8 位的值(代表 alpha 值和 RGB 顏色組件)組成一個 32 位字。同時 getRGB() 還有一個重載的版本,它從一部分圖像數據中返回一個像素數組。您也可以通過調用 setRGB() 方法來設置單個像素。前兩個參數是該像素的坐標值,第三個參數是待設定的值,類型為 int。這個方法也有一個版本可以設置像素數組的值。

  至此我們已經完成了像素操作的學習。下面我們要建立一個 applet,它在 Wrox 徽標背景上使 BufferedImage 對象具有動畫效果。我們的示例還將演示怎樣能讓圖像局部透明。applet 的基本內容如下所示:

  import java.awt.*;
  import java.awt.image.*;
  import java.awt.geom.*;
  import javax.swing.*;

  public class ImageDrawDemo extends JApplet
  {
  // The init() method to initialize everything...
  // The start() method to start the animation...
  // The stop() method to stop the animation...
  // The ImagePanel class defining the panel displaying the animation...
  // Data members for the applet...
  }

  創建一個圖像

  一個子圖形是一個小的圖形圖像,可以將其繪制在靜態圖像以創建動畫。要創建動畫效果,您只要隨著時間推移,在不同的位置和方向上繪制子圖形。當然,利用坐標系的變形可以使之簡化許多。游戲經常使用子圖形 — 由于您只需要在一個靜態背景上繪制子圖形,所以可以使動畫所占用的處理器的時間大大減少。我們對使用 BufferedImage 對象的興趣意味著我們將不再花費精力去研究減少處理器時間的最佳技術,而是把注意力放在理解怎樣才能在一個程序內部創建和使用圖像上。

  我們的 BufferedImage 對象看上去如圖 1 中的圖像:

  圖 1. BufferedImage 子圖形

  這個圖像是一個以 spriteSize 為邊長的正方形。圖像其它部分的尺寸值都與這個邊長相關。實際上這里只有兩個幾何實體,一條線和一個圓,都在不同位置和方向重復出現。如果我們創建一個 Line2D.Double 對象代表線,創建一個 Ellipse2D.Double 對象代表圓,那么我們就可以通過移動用戶坐標系和畫這兩個對象中的一個或其它的對象而畫出整個圖像。

  如果是按真正面向對象的方法,應該定義一個類代表一個子圖形,可能是作為 BufferedImage 的一個子類,但由于我們是在探索使用 BufferedImage 對象的技巧,因此用一個 createSprite() 方法來畫出 BufferedImage 對象上的子圖形會更適合我們的目的。因為該方法只是我們的 applet 類的一個成員,所以我們將為 applet 添加數據成員以存儲任何需要的數據。您可以把我們將使用的數據成員插入到 applet 類中,如下所示:

  double totalAngle; // Current angular position of sprite
  double spriteAngle; // Rotation angle of sprite about its center
  ImagePanel imagePanel; // Panel to display animation

  BufferedImage sprite; // Stores reference to the sprite
  int spriteSize = 100; // Diameter of the sprite
  Ellipse2D.Double circle; // A circle - part of the sprite
  Line2D.Double line; // A line - part of the sprite

  // Colors used in sprite
  Color[] colors = {Color.red , Color.yellow, Color.green , Color.blue,
  Color.cyan, Color.pink , Color.magenta, Color.orange};

  java.util.Timer timer; // Timer for the animation
  long interval = 50; // Time interval msec between repaints

  這些成員的一般用途可以從注釋中清楚地看到。下面我們要看一看開發代碼時它們是怎樣被使用的。

  createSprite() 方法需要做的第一件事就是創建 BufferedImage 對象 sprite,然后我們還需要一個 Graphics2D 對象用于在 sprite 圖像上繪畫。下面就是完成這些操作的代碼:

  BufferedImage createSprite(int spriteSize)
  {
  // Create image with RGB and alpha channel
  BufferedImage sprite = new BufferedImage(spriteSize, spriteSize,
  BufferedImage.TYPE_INT_ARGB);

  Graphics2D g2D = sprite.createGraphics(); // Context for buffered image
  // plus the rest of the method...
  }

  sprite 對象的寬和高的值都是 spriteSize,圖像的類型為 TYPE_INT_ARGB,就是說每個像素的 alpha 值和顏色組件是以一個單獨的 int 值存儲的,而顏色是以 8 位的紅、綠、藍組件的形式存儲的。這意味著我們的 sprite 圖像將占用 40,000 字節,這只是瀏覽一個網頁會占用的內存的很小一部分。而這并不影響網頁的下載時間,因為在執行 applet 的時候,這部分內存是在本地機器上被分配的。除了作為網頁本身的 HTML 文件的內容外,下載時間還取決于 applet 的 .class 文件的大小,以及在它執行時下載的圖像或其它文件。

    創建一個透明的背景

  在 sprite 圖像中,alpha 通道是很重要的,因為我們希望背景能完全透明。在繪畫過程中,只有 sprite 對象本身應該是可見的,而不是整個 100×100 的矩形圖像。我們可以很容易地實現這一目的,只要開始先使整個 sprite 圖像區域透明(即,alpha 值為 0.0f),然后把我們想要畫的圖形繪制在上面,使之不透明(alpha 值為 1.0f)。以下是使整個圖像透明的代碼:

  // Clear image with transparent alpha by drawing a rectangle
  g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f));
  Rectangle2D.Double rect = new Rectangle2D.Double(0,0,spriteSize,spriteSize);
  g2D.fill(rect);

  我們首先使用 AlphaComposite 對象按照 CLEAR 規則設置 alpha 合成值,把顏色組件設置為零,又通過設置 alpha 值為 0.0f,使之透明。然后我們填充一個覆蓋整個圖像區域的矩形。我們不必設置顏色值,因為根據 CLEAR 規則,每個像素的前景和背景色所占成分都是零,所以這兩者都不參與像素的生成。但我們仍要填充該矩形,因為這將確定被操作的圖像像素。

  這里,我們可以稍微了解一下怎樣控制圖像的質量。

  著色微調

  對著色操作的許多方面而言,都有一個在質量和速度間選擇的問題。著色操作就像大多數事情一樣 — 質量是需要代價的,而這里的代價就是處理時間。所有的著色操作都有缺省設置,其中存在一個選擇,缺省設置是特定于平臺的,但您可以通過調用用于著色的 Graphics2D 對象的 setRenderingHint() 方法自己選擇。雖然只有一些微調,如果您的計算機不支持與您指定的微調相對應的著色操作選項,這些微調就無法生效。

  通過添加以下對 createSprite() 方法的調用,可以確保得到由我們的 alpha 合成操作可能生成的最好效果。

  BufferedImage createSprite(int spriteSize)
  {
  // Create image with RGB and alpha channel
  BufferedImage sprite = new BufferedImage(spriteSize, spriteSize, BufferedImage.TYPE_INT_ARGB);

  Graphics2D g2D = sprite.createGraphics(); // Context for buffered image

  // Set best alpha interpolation quality
  g2D.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,
  RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);

  // Clear image with transparent alpha by drawing a rectangle
  g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f));
  Rectangle2D.Double rect = new Rectangle2D.Double(0,0,spriteSize,spriteSize);
  g2D.fill(rect);

  // plus the rest of the method...
  }

  RenderingHints 類定義了多種著色微調,它們存儲在一個映射集的 Graphics2D 對象里。 setRenderingHint() 方法的參數是一個鍵以及對應的鍵值。在我們的代碼中,第一個參數是代表 alpha 合成微調的鍵,第二個參數是該微調的值。該微調的其它可能的值有 VALUE_ALPHA_INTERPOLATION_DEFAULT,代表平臺缺省值;以及 VALUE_ALPHA_INTERPOLATION_SPEED,代表追求速度而不是質量。

  您還可以為下面的鍵提供微調:

  鍵 描述
  KEY_ANTIALIASING決定是否使用抗鋸齒。當著色有傾斜角度的線時,通常會得到一組階梯式的像素排列,使這條線看上去不平滑,經常被稱為 鋸齒狀圖形。抗鋸齒是一種技術,它設置有傾斜角度的線的像素亮度,以使線看起來更平滑。因此,這個微調是用來決定在著色有傾斜角度的線時是否在減少鋸齒狀圖形上花費時間。可能的值有 VALUE_ANTIALIAS_ON, _OFF 或 _DEFAULT。
  KEY_COLOR_RENDERING控制顏色著色的方式。可能的值有 VALUE_COLOR_RENDER_SPEED, _QUALITY 或 _DEFAULT。
  KEY_DITHERING控制如何處理抖動。抖動是用一組有限的顏色合成出一個更大范圍的顏色的過程,方法是給相鄰像素著色以產生不在該組顏色中的新的顏色幻覺。可能的值有 VALUE_DITHER_ENABLE, _DISABLE 或 _DEFAULT。
  KEY_FRACTIONALMETRICS文本的質量。可能的值有 VALUE_FRACTIONALMETRICS_ON, _OFF 或 _DEFAULT。
  KEY_INTERPOLATION確定怎樣做內插。

  在對一個源圖像做變形時,變形后的像素很少能夠恰好對應目標像素位置。在這種情況下,每個變形后的像素的顏色值不得不由周圍的像素決定。

  內插就是實現上述過程。有許多可用的技術。可能的值,按處理時間從最多到最少,是 VALUE_INTERPOLATION_BICUBIC, _BILINEAR 或 _NEAREST_NEIGHBOR。

  KEY_RENDERING 確定著色技術,在速度和質量之間進行權衡。可能的值有 VALUE_RENDERING_SPEED, _QUALITY 或 _DEFAULT。

  KEY_TEXT_ANTIALIASING 確定對文本著色時是否抗鋸齒。可能的值有 VALUE_TEXT_ANTIALIASING_ON, _OFF 或 _DEFAULT。

  我們繞得已經夠遠了。讓我們回到繪制 sprite 上……

您可能感興趣的文章:
  • java數字圖像處理基礎使用imageio寫圖像文件示例
  • Java圖像處理工具類
  • 詳解Java如何實現圖像灰度化
  • 使用Java進行圖像處理的一些基礎操作
  • Java實現的圖像查看器完整實例
  • 舉例解析Java的圖像緩沖技術的使用
  • Java圖像之自定義角度旋轉(實例)
  • 簡述Java圖像傾斜方法及實例
  • Java圖像處理教程之正片疊底效果的實現

標簽:亳州 紅河 大興安嶺 岳陽 武威 鄭州 馬鞍山 拉薩

巨人網絡通訊聲明:本文標題《Java應用程序中創建圖像》,本文關鍵詞  Java,應用程序,中,創建,圖像,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Java應用程序中創建圖像》相關的同類信息!
  • 本頁收集關于Java應用程序中創建圖像的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    精品国精品自拍自在线| 亚洲精品一区二区三区影院| 成人黄色综合网站| 久久免费午夜影院| 韩国女主播成人在线观看| 亚洲精品伦理在线| 精品日韩欧美一区二区| 亚洲制服丝袜在线| 色屁屁一区二区| 精品亚洲成a人| 中文字幕精品—区二区四季| 欧美不卡在线视频| 日韩欧美国产电影| 亚洲成a人v欧美综合天堂| 这里是久久伊人| 99国产精品一区| 洋洋成人永久网站入口| 国产精品电影院| 日韩免费观看2025年上映的电影 | 国产不卡免费视频| 91麻豆精品国产91久久久资源速度 | 成人做爰69片免费看网站| 欧美日韩1区2区| 国产午夜久久久久| 成人黄色小视频| 亚洲欧洲成人精品av97| www.亚洲激情.com| 国产精品影视在线| 成人免费黄色大片| 久久99最新地址| 久久精品一区二区三区四区| 在线欧美日韩国产| 国产呦萝稀缺另类资源| 欧洲一区在线电影| 麻豆免费看一区二区三区| 丝袜脚交一区二区| 亚洲一区二区三区国产| 日本一区二区三区国色天香| 日韩精品乱码av一区二区| 久久精品亚洲一区二区三区浴池| 精品一区精品二区高清| 日本伊人色综合网| 亚洲靠逼com| 性感美女久久精品| 亚洲视频精选在线| 不卡高清视频专区| 国产91精品一区二区麻豆亚洲| 蜜桃av一区二区在线观看 | 在线中文字幕一区| 免费观看在线综合| 日本美女视频一区二区| 亚洲中国最大av网站| 国产精品美女久久久久久久网站| 久久久99久久| 91小视频免费看| 26uuu另类欧美| 欧美日韩在线三级| 国产91综合网| 国产精品福利av| 日本欧美一区二区在线观看| 久久精品欧美日韩精品| 色综合天天性综合| 亚洲午夜视频在线| 一区二区三区在线视频免费 | 日韩一区二区在线看| 91麻豆国产福利精品| 国产精品久久久久久久久免费相片 | 大美女一区二区三区| 国产乱人伦精品一区二区在线观看 | 99久久99久久综合| 粉嫩13p一区二区三区| 国产凹凸在线观看一区二区| 国产成人亚洲精品青草天美| 国产一区中文字幕| 久久精品99久久久| 国产精品99久久久久久宅男| 国内精品不卡在线| 国产精品亚洲一区二区三区在线| 蜜桃传媒麻豆第一区在线观看| 天天综合色天天| 亚洲www啪成人一区二区麻豆| 亚洲观看高清完整版在线观看 | 国产视频911| 国产日韩高清在线| 欧美精彩视频一区二区三区| 欧美激情一区二区三区全黄| 成人av在线一区二区三区| 丁香激情综合国产| 成人深夜在线观看| 色综合天天综合给合国产| jlzzjlzz亚洲日本少妇| 99久久夜色精品国产网站| 成人精品免费网站| 色94色欧美sute亚洲线路二| 欧美亚洲尤物久久| 欧美乱熟臀69xxxxxx| 91精品国产综合久久精品麻豆| 国产精品一区在线观看你懂的| 成人精品亚洲人成在线| 99精品视频在线免费观看| 欧美视频一二三区| 欧美精品高清视频| 精品久久久久一区二区国产| 国产精品萝li| 亚洲一二三区在线观看| 午夜一区二区三区在线观看| 国产在线一区二区| 日本成人在线看| 麻豆免费精品视频| 91丨porny丨蝌蚪视频| 日本乱码高清不卡字幕| 精品三级在线观看| 国产午夜精品一区二区三区视频| 亚洲啪啪综合av一区二区三区| 一区二区三区在线观看欧美| 欧美高清激情brazzers| 精品国产精品网麻豆系列| 国模冰冰炮一区二区| 欧美怡红院视频| 欧美福利视频导航| 久久久亚洲午夜电影| 一区二区三区精品在线| 日韩福利视频导航| caoporn国产一区二区| 日韩一级黄色大片| 18成人在线观看| 激情欧美日韩一区二区| 99久久国产综合精品女不卡| 欧美午夜精品电影| 亚洲美女偷拍久久| 不卡大黄网站免费看| 日韩亚洲欧美在线| 亚洲男人天堂av| 国产成人午夜视频| 日韩亚洲电影在线| 亚洲成人精品一区二区| 成人美女在线观看| 久久久久国产精品麻豆ai换脸 | 亚洲国产成人av好男人在线观看| 亚洲成av人片www| 欧美一区二区三区公司| 日本美女一区二区三区视频| aaa亚洲精品一二三区| 婷婷成人综合网| 欧洲日韩一区二区三区| 国产在线日韩欧美| 中文字幕一区不卡| 欧美丝袜丝交足nylons图片| 亚洲综合自拍偷拍| 日韩一区二区视频在线观看| 懂色av一区二区三区免费观看| 国产精品全国免费观看高清| 欧美主播一区二区三区美女| 同产精品九九九| 国产精品久久网站| 欧美日韩国产一区| bt7086福利一区国产| 天堂影院一区二区| 国产精品色眯眯| 日韩欧美激情四射| 高清shemale亚洲人妖| 日韩av在线免费观看不卡| 中文一区二区完整视频在线观看| 欧美日韩日本视频| 国产剧情一区二区| 免费的成人av| 蜜桃视频在线一区| 亚洲国产精品久久人人爱| 久久久午夜精品| 久久九九久久九九| 精品少妇一区二区三区在线播放| 欧美日韩国产首页| 一本久久a久久免费精品不卡| 韩国午夜理伦三级不卡影院| 日本中文一区二区三区| 日韩电影在线观看网站| 日本午夜精品一区二区三区电影 | 欧美色网站导航| 欧美精品乱人伦久久久久久| 777久久久精品| 日韩精品一区二区三区视频在线观看 | 精久久久久久久久久久| 精品成a人在线观看| 欧美国产精品中文字幕| 国产欧美久久久精品影院| 色8久久人人97超碰香蕉987| 91丨porny丨首页| 91精品国产欧美一区二区18| 日韩电影免费一区| 国产资源在线一区| 91欧美一区二区| 91精品啪在线观看国产60岁| 久久婷婷国产综合精品青草| 亚洲精品视频免费看| 日韩成人一区二区三区在线观看| 另类小说一区二区三区| 日本不卡免费在线视频| 99热99精品| wwwwww.欧美系列| 亚洲国产精品久久久男人的天堂|