/// <summary> /// 指定された単色ビットマップ画像をDXT3テクスチャへ変換する /// </summary> /// <param name="source">変換元画像</param> /// <param name="color0">単色カラー</param> /// <returns>DXT3圧縮された画像</returns> public static Dxt3BitmapContent Compress(PixelBitmapContent <Color> source, Color color0) { // DXT3ブロックデータを格納するためのバッファを確保 byte[] outputData = new byte[source.Width * source.Height]; // 単色カラーをBGR565に変換する ushort packedColor = new Bgr565(color0.ToVector3()).PackedValue; // 指定された画像を圧縮ブロック単位に処理をする int outputIndex = 0; for (int blockY = 0; blockY < source.Height; blockY += 4) { for (int blockX = 0; blockX < source.Width; blockX += 4) { CompressDxt3Block(source, blockX, blockY, packedColor, outputData, outputIndex); outputIndex += 16; } } // DXT3テクスチャの生成と圧縮したブロックデータの設定 var result = new Dxt3BitmapContent(source.Width, source.Height); result.SetPixelData(outputData); return(result); }