자바 에서 이미지 예화 작업 방법 에 대한 상세 한 설명
본 논문 의 이미지 예화 란 이미지 에 있 는 R,G,B 의 값 을 각각 원 이미지 에서 제시 한 다음 에 이 세 개의 R,G,B 의 값 을 각각 볼 륨 핵 과 볼 륨 을 한 다음 에 마지막 세 개의 볼 륨 결 과 를 하나의 픽 셀 값 으로 합성 하여 이미지 의 예화 효 과 를 실현 하 는 것 이다.
2.전체적인 이미지 예화 코드 는 다음 과 같 습 니 다.
package com.yf1105;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class ImageTest extends JFrame{
public static void main(String[] args) {
new ImageTest();
}
public ImageTest() {
setSize(1000,700);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
int[][] rgbOfImg = getImagePixel("image/3.jpg");
test(g, " ",rgbOfImg.length, rgbOfImg[0].length, rgbOfImg);
// g.drawImage(new ImageIcon("img/hk.jpg").getImage(), 0, 0, null);
}
public void test(Graphics graphics,String text,int width,int height,int[][] rgbOfImg) {
int[][] R ,G ,B;
int size=3;
//
// if(text.equals(" ")){size = 5;}
//
double[][] sharpening = {{-1,-1,-1},{-1,9,-1},{-1,-1,-1}};
// float[][] sharpening = { { -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1 }, { -1, -1, 25, -1, -1 },
// { -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1 } };
//
// rgb
R = new int[size][size];
G = new int[size][size];
B = new int[size][size];
// 3*3
for(int x = 0;x < width-size+1;x++){
for(int y = 0;y < height-size+1;y++){
// r,g,b , 0,
int resultOfR = 0;
int resultOfG = 0;
int resultOfB = 0;
// rgb ,
for(int j = 0;j <size;j++){
for(int i = 0;i < size;i++){
// RGB ,
int argb = rgbOfImg[x][y];
// R,G,B
//int 4 32 ,0 (A),1 R ,2 G ,3 B
//>> : , , 0, 1,
//&: , 1 1,0xff 1 (11111111), 0xff
// , 32 8
R[i][j] = argb>>16 & 0xff;
G[i][j] = argb>>8 & 0xff;
B[i][j] = argb & 0xff;
}
}
if(text.equals(" ")){
// R,G,B ,
for(int j = 0;j < size;j++){
for(int i = 0;i < size;i++){
resultOfR += (int)(sharpening[i][j]*R[i][j]);
}
}
for(int i = 0;i < size;i++){
for(int j = 0;j < size;j++){
resultOfG += (int)(sharpening[i][j]*G[i][j]);
}
}
for(int i = 0;i < size;i++){
for(int j = 0;j < size;j++){
resultOfB += (int)(sharpening[i][j]*B[i][j]);
}
}
}
// rgb (0-255),
if(resultOfR > 255)resultOfR = 255;
if(resultOfR < 0)resultOfR = 0;
if(resultOfG > 255)resultOfG = 255;
if(resultOfG < 0)resultOfG = 0;
if(resultOfB > 255)resultOfB = 255;
if(resultOfB < 0)resultOfB = 0;
// rgb
Color color = new Color(resultOfR, resultOfG, resultOfB);
// , graphics ( BufferedImage Graphics )
graphics.setColor(color);
// (drawline , , )
//size/2
graphics.drawLine(x+size/2, y+size/2, x+size/2, y+size/2);
}
}
}
//
public int[][] getImagePixel(String image) {
BufferedImage bi = null;
File file = new File(image);
try {
bi = ImageIO.read(file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int w = bi.getWidth();
int h = bi.getHeight();
int imgindex[][] = new int[w][h];
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
int rgb = bi.getRGB(i, j);
imgindex[i][j] = rgb;
System.out.print(" " + rgb);
}
System.out.println();
}
return imgindex;
}
}
출력 결과:원본 그림 과 의 차 이 는 크 지 않 지만 볼 륨 핵 선택 때 문 일 수 있 습 니 다.
3.핵심 코드 의 해석
이 세그먼트 코드 는 RGB 이미지 의 R,G,B 값 을 추출 한 다음 에 각각 R,G,B 값 을 볼 륨 작업 한 다음 에 볼 륨 된 결 과 를 int 의 픽 셀 값 으로 재 통합 하여 이미지 의 예화 처 리 를 실현 합 니 다.
당시 에 이 코드 를 보 았 을 때 이 부분 은 잘 모 르 는 것 을 발 견 했 습 니 다.코드 는 다음 과 같 습 니 다.
R[i][j] = argb>>16 & 0xff;
G[i][j] = argb>>8 & 0xff;
B[i][j] = argb & 0xff;
그러나 하위 연산 과 연산 을 자세히 분석 한 결과 이 코드 는 R,G,B 의 값 을 각각 추출 하 는 것 을 발견 했다.int 류 의 픽 셀 값 에는 a,r,g,b 네 개의 값 이 포함 되 어 있 고 int 는 32 비트 이 며 이 네 개의 수 는 순서대로 int 에 존재 하고 각 수 는 8 위 를 차지 하기 때문이다.따라서 r 는 2 진법 에 대해 16 비트 를 이동 해 야 oxff(즉 1111 1111)와 연산 할 수 있 습 니 다.b 는 2 진법 에 대해 8 비트 를 이동 해 야 oxff(즉 1111 1111)와 연산 할 수 있 습 니 다.g 는 직접 oxff(즉 1111 1111)와 연산 하면 됩 니 다.이렇게 표현 하 는 것 이 이해 하기 어렵 지만 아래 의 설명도 를 보 세 요.총결산
자바 의 이미지 예화 작업 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 이미지 예화 작업 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.