こんにちは。きんくまです。
もう年末ですね。
さて、今回はExcelのRGBの計算方法についてです。誰トクなのかわからない情報なのですが、誰かの役に立つかもしれないので、、、。
ExcelのVBAでセルに色を塗るときに RGBを使って
1 | Cells(1, 1).Interior.Color = RGB(255, 100, 30) |
とかってできます。それで、RGBを使わずに数値に置き換えることも可能です。
ロング型の整数を入れてあげれば良いみたいです。ここではテキストをロング型に変換して設定しています。
1 2 | '値は上のとイコールじゃないです Cells(1, 1).Interior.Color = CLng("123456") |
それで、AS3とかJavaScriptだとRGBを整数に変換するときはこうなると思います。
1 2 3 4 5 6 | var red: int = 200 ; var green: int = 100 ; var blue: int = 30 ; var rgb: int = red * 256 * 256 + green * 256 + blue; //ビット演算を使うとこうゆう風にも書ける var rgb: int = red << 16 | green << 8 | blue; |
でも、調べてみるとExcelのRGBは計算方法が違っていました。
青(B)が16ビット分あがって、赤(R)はそのままなんですね。
1 2 3 | var rgb: int = red + green * 256 + blue * 256 * 256 ; //ビット演算を使うとこうゆう風にも書ける var rgb: int = red | green << 8 | blue << 16 ; |
ビットマップデータBitmapDataからExcelのRGB用のCSVテキストに変換する
というわけでビットマップデータからCSVに変換するやつを書いてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function convertBitmapDataToText(bitmapData:BitmapData): String { var csvTexts: Array = []; bitmapData.lock(); for ( var rowIndex: int = 0 , rowLen: int = bitmapData.height; rowIndex < rowLen; rowIndex++){ var rowTexts: Array = []; for ( var columnIndex: int = 0 , columnLen: int = bitmapData.width; columnIndex < columnLen; columnIndex++){ var rgbInt: int = bitmapData.getPixel(columnIndex, rowIndex); /** * flashのRGBのintは Red << 16 | Green << 8 | Blue * だけどExcelのRGBのLongは Red | Green << 8 | Blue << 16 * なのでそっちに変換する */ var red: int = rgbInt >> 16 & 0xff ; var green: int = rgbInt >> 8 & 0xff ; var blue: int = rgbInt & 0xff ; var excelRgbLong: int = red | green << 8 | blue << 16 ; rowTexts.push(excelRgbLong.toString()); } //カンマ区切り var rowText: String = rowTexts.join( "," ); //行は\r\n区切り csvTexts.push(rowText + "\r\n" ); } bitmapData.unlock(); return csvTexts.join( "" ); } |
AIRで開発用のちょっとしたツールを作ってまして、出てきたメモでした。
ではでは。
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ