Udemy Course Multithreading, Concurrency & Performance 9

製作圖檔顏色轉換(上)

ZONGRU Li
Jun 29, 2021

一張照片圖檔是由許多像素(pixels)組成

每個像素又由4bites的ARGB顏色組成

A:Alpha(transparency),其他RGB就是紅綠藍

調整RGB component就能調整像素顏色

亦即每個像素都有各自的Red Green Blue的組成比例(0~255)

例如R:255 G:255 B:255 則該像素看起來會變成白色

講師有提供以下照片

Udemy Cource Resources-Java Multithreading, Concurrency & Performance Optimization

接著嘗試用Java將上述白花的部分也變成紅(粉紅)花色

將以上照片放入resources內

開始撰寫改寫顏色的Java程式:

但是在那之前先理解部分Java如何控制像素ARGB這個4bites

首先是進位表示式:

ARGB單位像素可以使用同樣4bites的int型別處理

int型別的變(參)數在二進位下完成個別RGB的控制

以下用16進制給予int型別的變數值範例參考:

<<或是>>表示二進位下移位(ex:00000101 <<2會變成00010100)

然後後面範例會使用到|=表示式

例如int a=4

在二進位下a可以長這樣:0100

當執行a|=3

3(在二進制下是0011)

|=在二進制位數有1的取代

最終a在二進制下變成0111

正戲(處理製作像素的程式):

1.先建立處理像素int方法(底下rgb & 16進位數在二進制下同位數為1才算1)

理解以上方法後

再來撰寫讀圖檔的部分:

使用BufferedImage來處理

另外要將結果填入指定位置像素rgb要在撰寫以下:

然後建立替換像素顏色的Method:

接著最後就是依據位置呼叫上述Method的Method:

在單一Thread執行處理的Method如下:

最後就是Main裡面呼叫上述Method:

嘗試執行後refresh看到:

eclipse裡面看有點糊..
window看圖比較清楚

以上所有程式碼:

以上是先以單一Thread處理這個像素轉換

接下來就要改造成Multi-Threads

(之後專案會放自己github內)

參考課程

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet