一種簡單的方法在程式中實現透明效果(JAVA)(原始碼)
/*
* 構建imageSrc的拷貝,象素顏色為mask的顯示為透明
*
* @param imageSrc 原始影象
* @param mask mask為Object的例項,因為如果imageSrc為灰度圖,或者為索引顏色圖,則mask應為指定
* 灰度或索引的數值。如果imageSrc是其他模式的影象,則使用一個Color物件指定顏色值
* @return 返回imageSrc的拷貝,象素顏色為mask的顯示為透明
*/
publicstatic BufferedImage createImageByMaskColor(BufferedImage imageSrc, Object mask)
int x = imageSrc.getWidth(null);
int y = imageSrc.getHeight(null);
Raster rasterSrc = imageSrc.getRaster();
BufferedImage imageDes =new BufferedImage(x, y, BufferedImage.TYPE_4BYTE_ABGR);
WritableRaster rasterDes = imageDes.getRaster();
int[] src
int[] des =newint[4];
int type = imageSrc.getType();
if (type == BufferedImage.TYPE_BYTE_GRAY) {
int cmask = (Integer)mask;
while (--x >=0)
for (int j =0; j < y; ++j) {
src = rasterSrc.getPixel(x, j, (int[])
if (src[0] == cmask)
des[3] =0;
else{
des[0] = src[0];
des[1] = src[0];
des[2] = src[0];
des[3] =255;
}
rasterDes.setPixel(x, j, des);
}
}elseif (type == BufferedImage.TYPE_BYTE_INDEXED) {
int cmask = (Integer)mask;
ColorModel cm = imageSrc.getColorModel();
Object data =null;
while (--x >=0)
for (int j =0; j < y; ++j) {
src = rasterSrc.getPixel(x, j, (int[])null);
if (src[0] == cmask) {//透明
des[3] =0;//
}else{
data = rasterSrc.getDataElements(x, j, null);
int argb = cm.getRGB(data);
Color color =new Color(argb, true);
des[0] = color.getRed();
des[1] = color.getGreen();
des[2] = color.getBlue();
des[3] =255;
}
rasterDes.setPixel(x, j, des);
}
}else{
ColorModel cm = imageSrc.getColorModel();
Color cmask = (Color)mask;
Object data =null;
int maskR, maskG, maskB;
maskR = cmask.getRed();
maskG = cmask.getGreen();
maskB = cmask.getBlue();
while (--x >=0)
for (int j =0; j < y; ++j) {
data = rasterSrc.getDataElements(x, j, null);
int rgb = cm.getRGB(data);
int sr, sg, sb;
sr = (rgb &0xFF0000)>>16;
sg = (rgb &0xFF00)>>8;
sb = rgb &0xFF;
if (sr != maskR || sg != maskG || sb != maskB) {
des[0] = sr;
des[1] = sg;
des[2] = sb;
des[3] =255;
}
else
des[3] =0;
rasterDes.setPixel(x, j, des);
}
}
return imageDes;
}
/*
* 構建imageSrc的拷貝,象素顏色為mask的顯示為透明
*
* @param imageSrc 原始影象
* @param mask 無論原始影象的色彩模式為何種模式,mask統一傳入一個
* Color型別的物件指定希望顯示為透明的色彩值
* @return 返回imageSrc的拷貝,象素顏色為mask的顯示為透明
*/
publicstatic BufferedImage createImageByMaskColorEx(BufferedImage imageSrc, Color mask) {
int x, y;
x = imageSrc.getWidth(null);
y = imageSrc.getHeight(null);
Raster rasterSrc = imageSrc.getRaster();
BufferedImage imageDes =new BufferedImage(x, y, BufferedImage.TYPE_4BYTE_ABGR);
WritableRaster rasterDes = imageDes.getRaster();
int[] src =null;
int[] des =newint[4];
ColorModel cm = imageSrc.getColorModel();
Color cmask = (Color)mask;
Object data =null;
int maskR, maskG, maskB;
maskR = cmask.getRed();
maskG = cmask.getGreen();
maskB = cmask.getBlue();
while (--x >=0)
for (int j =0; j < y; ++j) {
data = rasterSrc.getDataElements(x, j, null);
int rgb = cm.getRGB(data);
int sr, sg, sb;
sr = (rgb &0xFF0000)>>16;
sg = (rgb &0xFF00)>>8;
sb = rgb &0xFF;
if (sr == maskR && sg == maskG && sb == maskB)
des[3] =0;
else{
des[0] = sr;
des[1] = sg;
des[2] = sb;
des[3] =255;
}
rasterDes.setPixel(x, j, des);
}
return imageDes;
}
/*
* 建立漸進透明的影象,
* @param imageSrc imageSrc必須是一個單位元組灰度圖,
* 在生成的影象中原始影象的黑色區域將被視為透明,
* 透明度由黑色到白色逐漸降低,到白色時完全不透明
* <b>createGrayImage()方法返回的BufferedImage物件不能作為這個方法輸入
* 因為createGrayImage()方法返回的是一個四位元組灰度圖,而該方法的
* 引數需要的是一個單位元組的灰度圖(雖然也很容易實現四位元組灰度圖
相關推薦
一種簡單的方法在程式中實現透明效果(JAVA)(原始碼)
{ /**//* * 構建imageSrc的拷貝,象素顏色為mask的顯示為透明 * * @param imageSrc 原始影象 * @param mask mask為Object的例項,因為如果imageSrc為灰度圖,或者為索引顏色圖,則mask應為指定
pytroch用自定義的tensor初始化nn.sequential中linear或者conv層的一種簡單方法。
話不多說,上程式碼,上面寫的很清楚。 import torch.nn as nn import torch net= nn.Sequential( nn.Linear(1024, 512), nn.ReLU(inplace=True), nn.Linear(512,
實現對gridview刪除行時彈出確認對話方塊的一種簡單方法
首先,在GridView的屬性對框話框中點選“Columns”進入它的“欄位”設計器。接著在“欄位”設計器中選擇以前已加上的那個CommandField“刪除”列,這時在它的屬性列表下會看到一個“將此它段轉換為 TemplateFied”的項,點選將它轉換為TemplateFied列。完後退出該欄位設計器,切
一種簡單的Android 中全域性更換字型的方法
在我們開發Android程式的時候通常會遇到更改全域性字型的需求,我目前能想到的解決方案有三種,下面我們來進行逐一分析: 第一種方式就是自定義控制元件,毫無疑問這個一定能解決我們的問題,只需要把我們之前用的控制元件換成我們自定義的控制元件就好,缺點是如果是多種控制元件我們就
從檔案中讀取內容,並去掉換行符'\n'的一種簡單方法
開啟檔案後,可以用readlines將每一行的內容讀取到一個“列表”中, 獲取列表中每個元素,利用字串的strip('\n')去掉換行符 例如: lines = fd.readlines() for line in lines: line=line.strip('
php生成excel的另一種簡單方法
.com com span 來看 nbsp pan blog table content 之前我用table的方式寫過excel,還用php-excel這個類庫寫過excel。今天,我再向大家推薦一個超級簡單的寫excel的方法。 代碼: $xstr = "問題id\t問
獲取當前格式化時間的一種簡單方法
Date.prototype.isLeapYear = function() { return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0))); } //--
呼叫jupyter notebook檔案內的函式一種簡單方法
python開發環境jupyter notebook良好的互動式和模組化受到很多python開發人員的青睞,但是jupyter notebook是以json格式儲存檔案內容的,而不是python檔案那樣的普通格式,所以不能直接被python解析器解析,如何呼叫.ipynb中的module也成為一個問
iOS處理耗時操作一種簡單方法
在開發過程中,我們經常會遇到一下耗時的操作,比如說檔案的上傳、下載、壓縮、解壓縮等過程,開發過藍芽的小夥伴都知道藍芽的操作也是一個耗時的操作,尤其是那些以藍芽為工具的專案,比如說藍芽在智慧家居中的使用,這些都是耗時的操作。有時候我們需要對這些耗時的操作精準的加以控制,這時候
malloc函式的一種簡單的原理性實現
malloc()是C語言中動態儲存管理的一組標準庫函式之一。其作用是在記憶體的動態儲存區中分配一個長度為size的連續空間。其引數是一個無符號整形數,返回值是一個指向所分配的連續儲存域的起始地址的指標 malloc()工作機制 malloc函式的實質體現在,它有一個將
多執行緒中的全域性資訊統計的一種簡單實現方式(java實現)
如果你學過作業系統,我想你肯定對原子操作不會陌生,著名的哲學家就餐問題大家估計也不會陌生。如果現在有一個多執行緒的程式,有一個公共的訪問變數,那麼想正確的控制這個公共變數的值,每個學過計算機的人的處理方式肯定是使用一些互斥量,或者鎖機制,或者訊號量的方法保證對公共變數的訪問
Activity任務棧的管理 -----銷燬前一個相同的activity(還有一種簡單的方法實現)
需求:介面A跳轉到介面B,之後再跳轉到介面A,此時需要銷燬第一次建立的介面A,以此類推…. 思路:(在每次建立當前Activity的時候銷燬前部的activity即可,然後在添加當前activity的引用) 編寫ActivityManagement的
SpringBank 開發日誌 一種簡單的攔截器設計實現
exp bst 一個 pin factory span 之前 system request 當交易由Action進入Service之前,需要根據不同的Service實際負責業務的不同,真正執行Service的業務邏輯之前,做一些檢查工作。這樣的攔截器應該是基於配置的,與Se
mysql 中的 not like 另一種簡化方法。
ont pan 簡化 regex regexp from sel span rom 第一種 not like 方法 select * from table where `zongbu` not like ‘%北京%‘ and `zongbu` not like ‘%上海%‘
一種簡單的生產環境部署Node.js程序方法
set process 一次 ann 來安 環境配置 load 修改 evel 最近在部署Node.js程序時,寫了段簡單的腳本,發覺還挺簡單的,忍不住想與大家分享。 配置文件 首先,本地測試環境和生產環境的數據庫連接這些配置信息是不一樣的,需要將其分開為兩個文件存儲
一種簡單的對象賦值方法,定義實例後以{}賦值,比傳統方法更簡潔
method ott static set num arr nbsp st2 () public class Rectangle { public Point TopLeft { get; set; } public Point Botto
CCS5.5 中Image Analyzer的一種使用方法
color .cn nes style 5.5 調試 pixel 參數 技術 摘要:在DSP圖像處理調試過程中,經常會用到實時圖像提取。用CCS讀取DSP芯片中的數據,然後通過Image Analyzer顯示。在CCS3.3設置方法相對比較簡單。但是在CCS5.5中過程比較
一種簡單的圖像修復方法
col nes gb2 tle .com splay 產生 end left 該方法可以用於美顏中的祛斑,通過快速叠代的方式去除斑點。 假設輸入圖像為: 計算方向權重: 對於其他方向,操作類似We。 最終的輸出為: 對要修復的區域,反復進行同樣的操作即可。 簡單
一種內存池的實現方法
返回 memory 內存 cast oca ID incr count delet 基本的數據結構 大圖:https://drive.google.com/file/d/1s5Y_xPB_k-gOXxC1iwG60Jx0kb8yyQ1b/view?usp=sharing
數獨問題的一種簡單演算法程式碼實現
五一期間無聊時想起去年考研複試有一道上機題目當時沒作出來,於是一時興起想重新拾起看看是當時太緊張,還是自己能力不足。然後發現這道題目還真稍微有些難度,相當於一道數獨問題(sudoku)的簡化版。自己想來想去也只能想到兩種演算法,一種是拿剩餘元素做全排列測試,一種是回溯法測試。最後只實現了一個全排