0

すべての色のコードを帰属させ、それらを読み取ることができる方法はありますか?プログラム的に私は意味します。私の目標は、画像をコードに変換してから、画像に戻すことです。

4

2 に答える 2

0

各色には4つのフィールドがあります(一部の画像では、意味のある情報を持つ3つのフィールドしかありません)

これらのフィールドは次のとおりです。

  • アルファ(A)(これはピクセルの不透明度を表します)
  • 赤(R)(赤の強度)
  • 緑(G)(緑の強度)
  • 青(B)(青の強度)

あなたがすることは、それらを読み、値を互いに連結することによってそれぞれのコード文字列を生成することです。

これは、コンパイルされるかどうかを確認しなかったため、おそらく擬似コードと見なすことができますが、これに沿って何かを行う必要があります。

Dim pixelColor As Color
Dim image As BitMap = New BitMap("your_image.png")

Dim a As String
Dim r As String
Dim b As String
Dim g As String

Dim fileString As New StringBuilder()

fileString.AppendLine(image.Size.Width.ToString())
fileString.AppendLine(image.Size.Height.ToString())

' Loop over all pixels
For y As Integer = 0 To image.Size.Height - 1
    For x As Integer = 0 To image.Size.Width - 1
        pixelColor = image.GetPixel(x, y)

        ' get ARGB values as strings
        a = pixelColor.A.ToString()
        r = pixelColor.R.ToString()
        g = pixelColor.G.ToString()
        b = pixelColor.B.ToString()

        ' Append the colors, one pixel per line
        fileString.AppendLine(a & " " & r & " " & g & " " & b)
    Next
Next

Using file As New StreamWriter("image_data.txt")
    outfile.Write(fileString.ToString())
End Using

繰り返しますが、これはおそらくコンパイルされません。(現時点ではコンパイラを持っていません)

編集: 幅と高さも保存する必要があることに気づきました。


ファイルの読み取りについて:

Dim file As System.IO.StreamReader
file = File.OpenText("text_file.txt")

Dim width As Integer = Convert.ToInt32(file.ReadLine)
Dim height As Integer = Convert.ToInt32(file.ReadLine)

Dim image As BitMap = New BitMap(width, height)

Dim currentX As Integer = 0
Dim currentY As Integer = 0

Do Until file.EndOfStream
    Dim line As String = file.ReadLine

    Dim valueArray(4) As String = line.Split(" ")

    Dim a As Integer = Convert.ToInt16(valueArray(0))
    Dim r As Integer = Convert.ToInt16(valueArray(1))
    Dim g As Integer = Convert.ToInt16(valueArray(2))
    Dim b As Integer = Convert.ToInt16(valueArray(3))

    image.SetPixel(currentX, currentY, Color.FromArgb(a, r, g, b))

    currentX = currentX + 1

    If currentX == width Then
        currentX = 0
        currentY = currentY + 1

        If currentY == height Then
            Exit Do ' We're done here.
        End If
    End If
Loop

' At this point, you'll have a BitMap with all the pixels set.

繰り返しますが、この擬似コードを検討してください。

于 2013-03-23T09:09:15.643 に答える
0

各色は実際にはARGBカラーコードであり、整数値を取得するだけです

Dim myColor As Color = Color.Red
Dim Code As Integer = myColor.ToArgb()

Dim myColorBack As Color = Color.FromArgb(Code)
于 2013-03-23T09:16:53.270 に答える