2011-11-10 31 views
0

私はこのプログラムを、Javaの例ではハフ変換の下で見つけました。しかし、私はC#で私のプロジェクトをやっている、私はこの部分的なコード "0xff000000"によって何かを把握することはできません。 0xff000000というのは何の色ですか?もしその色なら私はそれをC#に変換できますか?未知のコード断片 - 0xff000000

private void drawPolarLine(int value, int r, int theta) { 
      for(int x=0;x<width;x++) { 

       for(int y=0;y<height;y++) { 

         int temp = (int)(x*Math.cos(((theta)*Math.PI)/180) + y*Math.sin(((theta)*Math.PI)/180)); 
        if((temp - r) == 0) 
         output[y*width+x] = 0xff000000 | (value << 16 | value << 8 | value); 

       } 
      } 
     } 

if ((input[y*width+x] & 0xff)== 255) { 
    //......... 
} 
+0

どんなにどのプログラミング言語から変換しているのですか?[Magic Numbers](http://en.wikipedia.org/wiki/Magic_number_(プログラミング)#Unnamed_numerical_constants)を何かを意味する定数で置き換えるよう常に努力する必要があります。 'private static final int COMPLETELY_OPAQUE = 0xFF000000;'など – Mike

+0

@マイケル – user1017919

答えて

3

16進数0xFF000000は、ドット10進表記で255.0.0.0と表されます。数字の0と1は?

通常、16進文字は特定の10進文字を表しません。 Base 2(Binary)ナンバーシステムでは4ビットを表します。これはIPアドレスにドット10進表記が使用されている理由です。 Hex FFは常に10進表記で255として表示できる2進数の1オクテットを表現するために使用されるため、ユーザーにとってより読みやすくなります。

1111 1111 0001 1111を表すとしますが、HexのFF1Fは実際にはBase 10(Decimal)ナンバーシステムでは65311ですが、ドット10進形式で0.0.255.31を使用します。

Hex ..........Decimal.......bin 
0...............0..............0 
1...............1..............1 
2...............2..............10 
3...............3..............11 
4...............4..............100 
5...............5..............101 
6...............6..............110 
7...............7..............111 
8...............8.............1000 
9...............9.............1001 
A..............10............1010 
B..............11............1011 
C..............12............1100 
D..............13............1101 
E..............14............1110 
F..............15............1111 
10............16........0001 0000 

プログラミング言語Javaでは、ポインタを提供しないため、オブジェクト/整数などのメモリ位置にアクセスすることはできません。私はc#の場合は確かではありませんが、本当にメモリの場所の仕組みを理解したい場合は、C++のような言語を学びます。

+0

C#でポインタを扱うことはできますが、ここではそれは関係ないと思います。質問はメモリアドレスではなく数字に関するものです。 – svick

+0

@svickありがとう – user1017919

3

RGBA表記では、一番左のバイトは一般にアルファチャンネルです。指定されたピクセルの透明度を示します。 0x00は完全に透明なピクセル、0xffは完全に不透明なピクセルです(透明度が全くない場合と同様)。

http://en.wikipedia.org/wiki/RGBA_color_spaceを参照してください。

+0

ありがとう、リンクは非常に有用でした – user1017919

2

コード0xff000000は、数値のちょうど16進表現です。具体的には、番号4,278,190,080。 C#で同じ方法で使用できます。

このコードでは、多分色を表していますが、あなたが何をしているかについてもっと知らずには分かりません。

+0

私は16進値をConvert.toInt32(0xff000000)に変換しました。それは働いた。助けてくれてありがとう – user1017919

+0

それはうまくいかないでしょう。その値はInt32のために大きすぎます。あなたのコードは私のために例外をスローします。 – svick

+0

@downvoter、あなたはこの答えに間違っていると思いますか? – svick

4

数字のちょうど16進表現です。 = 255 = 240 0xFの= 15、0xF0が、0xFFで、0xF12A = 61738、......、0xff000000 = 4278190080

あなたがやっているときには、コーディングで理解しやすく、より有意義だビット演算

+0

おかげさまで – user1017919