2011-07-14 5 views
0

A1R5G5B5タイプの画像(1ビットアルファ、5ビットレッド、5ビットグリーン、5ビットブルー)のピクセルである2バイト(16ビット)をC#で変換する必要があります標準0-255の値 ありがとうございましたc#read rgb from A1R5G5B5画像タイプ

+0

2バイトのみを変換したいとは思われません。 –

+0

A1R5G5B5フォーマットは2バイトのみです。たとえば、Photoshopから2または3色のフラットなTGAを保存し、イメージを圧縮すると、tgaはA1R5G5B5フォーマットで保存されます... – ghiboz

答えて

2

これはすばやく汚れた解決策ですが、それはあなたのために働くはずです。

using System.Drawing; 

class ShortColor 
{ 
    public bool Alpha { get; set; } 

    public byte Red { get; set; } 
    public byte Green { get; set; } 
    public byte Blue { get; set; } 

    public ShortColor(short value) 
    { 
     this.Alpha = (value & 0x8000) > 0; 

     this.Red = (byte)((value & 0x7C64) >> 10); 
     this.Green = (byte)((value & 0x3E0) >> 5); 
     this.Blue = (byte)((value & 0x001F)); 
    } 

    public ShortColor(Color color) 
    { 
     this.Alpha = color.A != 0; 

     this.Red = (byte)(color.R/8); 
     this.Green = (byte)(color.G/8); 
     this.Blue = (byte)(color.B/8); 
    } 

    public static explicit operator Color(ShortColor shortColor) 
    { 
     return Color.FromArgb(
      shortColor.Alpha ? 255 : 0, 
      shortColor.Red * 8, 
      shortColor.Green * 8, 
      shortColor.Blue * 8 
     ); 
    } 
} 
+0

試してみて! – ghiboz

関連する問題