2013-12-18 2 views
1

여기 내 코딩에 대한 도움이 필요합니다. RGB 값 (10 진수)을 2 진 값으로 변환하고 싶습니다. 그러나 이진 값 앞에 '0'비트가있을 때마다 결과에 '0'비트가 표시되지 않습니다.10 진수에서 2 진수로 변환 한 후 2 진수 값이 8 비트가 표시되지 않습니다.

예 : 십진수 = 94, 이진수 = 0101 1110. 그러나 결과에 1011110이 대신 표시되었습니다.

내 프로그램, 이미지 steganalysis에 대한 모든 이진 비트를 분석하고 싶습니다. 8 비트가 충분하지 않으면 오류가 발생할 수 있습니다.

이 내 코딩은 다음과 같습니다

public class getPixelData 
{ 
private static final double bitPerColor = 4.0; 

public getPixelData() 
{ 

} 

public int[] getPixelData(BufferedImage img, int w, int h) throws IOException 
{ 
    int argb = img.getRGB(w, h); 
    int rgb[] = new int[] 
    { 
     (argb >> 16) & 0xff, //red 
     (argb >> 8) & 0xff, //green 
     (argb  ) & 0xff //blue 
    }; 

    int red = rgb[0]; 
    int green = rgb[1]; //RGB Value in Decimal 
    int blue = rgb[2]; 

    System.out.println("\nRGBValue in Decimal --> " + "\nRed: " + red + " Green: " + green + " Blue: " + blue); 

    //Convert each channel RGB to Hexadecimal value 
    String rHex = Integer.toHexString((int)(red)); 
    String gHex = Integer.toHexString((int)(green)); 
    String bHex = Integer.toHexString((int)(blue)); 

    System.out.println("\nRGBValue in Hexa --> " + "\nRed Green Blue " + rHex + gHex + bHex); 

    //Convert each channel RGB to binary 
    String r4bit = Integer.toBinaryString((int)(red)); 
    String g4bit = Integer.toBinaryString((int)(green)); 
    String b4bit = Integer.toBinaryString((int)(blue)); 

    //Convert concatonate 0's in front to get desired bit count 
    int rDifference = (int)bitPerColor - r4bit.length(); 
    int gDifference = (int)bitPerColor - g4bit.length(); 
    int bDifference = (int)bitPerColor - b4bit.length(); 

    //this code should work but i guess it isn't 
    for (int i = rDifference; i > 0; i--) 
    { 
     r4bit = "0" + r4bit; 
    } 

    for (int i = gDifference; i > 0; i--) 
    { 
     g4bit = "0" + g4bit; 
    } 

    for (int i = bDifference; i > 0; i--) 
    { 
     b4bit = "0" + b4bit; 
    } 


    System.out.println("\nRGB Value in binary (Red) is: " + r4bit); 
    System.out.println("RGB Value in binary (Green) is: " + g4bit); 
    System.out.println("RGB Value in binary (Blue) is: " + b4bit); 

    return rgb; 
    } 
    } 

나는 여기 코딩에 무엇을 추가해야합니까? 참고로 저는 Java 언어에 아직 익숙하지 않습니다. 내가 실수를했다면 나를 바로 잡아라.

감사합니다.

답변

0

전원으로 나눌 필요가 없습니까?

float power = Math.pow(2, 4); 
String r4bit = Integer.toBinaryString((int)(red/power)); 
String g4bit = Integer.toBinaryString((int)(green/power)); 
String b4bit = Integer.toBinaryString((int)(blue/power)); 
+0

이전에 해본 적이 있습니다. 전체 8 진수 비트를 표시하지 않았습니다. 그냥 처음 4 비트 이진 표시 – user2890264

0

너 자신을 0으로 채워야합니다. 여기에 비슷한 질문이 있습니다. 맞습니다. Binary format of an integer

+0

나는 그것을 읽고 코드를 이해하지 못한다. 0 비트로 채우는 방법을 안내해 주시겠습니까? – user2890264

관련 문제