Yahoo 知識+ 將於 2021 年 5 月 4 日 (美國東岸時間) 停止服務,而 Yahoo 知識+ 網站現已轉為僅限瀏覽模式。其他 Yahoo 資產或服務,或你的 Yahoo 帳戶將不會有任何變更。你可以在此服務中心網頁進一步了解 Yahoo 知識+ 停止服務的事宜,以及了解如何下載你的資料。

徵求程式,讀黑白兩色bmp圖片,再將黑轉白,白轉黑

程式以Java或JApplet為佳

假設圖片存在C:\abc.bmp

請寫一程式讀出每一pixel,並將黑轉白,白轉黑,再存檔

20點瞭表敬意

本人將實際操作,若有多人都可以Run

將以程式簡節,import 簡單為首選

更新:

compile 過了

也可以跑,非常不錯

程式簡短明瞭(用exclusive or將0變1,1變0,...高招)

唯一可惜是把原檔案蓋掉

請問如何產生另一個檔

4 個解答

評分
  • ?
    Lv 4
    1 十年前
    最愛解答

    import java.io.*;

    import javax.imageio.*;

    import java.awt.image.*;

    public class Main {

    public static void main(String[] args) throws IOException {

    File file = new File("C:\\abc.bmp"); // 設定要讀取的檔案

    BufferedImage image = ImageIO.read(file); // 以ImageIO讀取檔案成BufferedImage物件

    // 以下對每個pixel做運算

    for (int x = 0, width = image.getWidth(); x < width; x++) {// for each pixel x

    for (int y = 0, height = image.getHeight(); y < height; y++) {// for each pixel y

    int rgb = image.getRGB(x, y) ^ 0xffffff;// 取出x,y的rgb值並以xor 0xffffff運算將其反向

    image.setRGB(x, y, rgb); // 將運算後的值存回

    }

    }

    ImageIO.write(image, "BMP", file); // 以ImageIO將運算後的BufferedImage物件存回檔案

    }

    }

    上述image.getRGB(x, y) ^ 0xffffff屬於單純的數學問題,如不明白請再補充,在此先不多做贅述

    如果你的圖中只有黑白兩色,則本程式可達到你要的黑轉白、白轉黑的效果,若有其他色,則會得出該色反差的效果,如果你要的是僅轉換黑色與白色兩色,其他色要維持原色的話,請參考下列。

    將int rgb = image.getRGB(x, y) ^ 0xffffff改成

    int rgb = image.getRGB(x, y);

    rgb = rgb == 0xffffff ? 0x000000 : rgb == 0x000000 ? 0xffffff : rgb;// 僅運算黑與白,其他色則維持原色

    即可

    以上請參考

    2009-08-11 03:05:06 補充:

    new一個新的File Object

    File result = new File("C:\\abc.result.bmp");

    ImageIO.write(image, "BMP", result );

    會寫成蓋掉原檔是因為你題目沒指明

  • 1 十年前

    JApplet是java提供的Class,

    http://java.sun.com/j2se/1.5.0/docs/api/javax/swin...

    利用JApplet可讓程式在網頁跑,所以.."JApplet為佳"是這個意思

    拍謝,讓各位以為用java與JApplet是兩個不同語言

    不過兩位大大還來得及,...

    試想有一視窗是黑白負片,按一下轉換程式,就變成正片....這應該是JApplet,或AWT功能吧!

  • ㄚ旺
    Lv 5
    1 十年前

    畫蛇添足....

    JApplet 我猜就是 java applet

  • ?
    Lv 4
    1 十年前

    沒聽過JApplet耶...

還有問題嗎?立即提問即可得到解答。