こんにちは。きんくまです。
もう年末ですね。
さて、今回はExcelのRGBの計算方法についてです。誰トクなのかわからない情報なのですが、誰かの役に立つかもしれないので、、、。
ExcelのVBAでセルに色を塗るときに RGBを使って
Cells(1, 1).Interior.Color = RGB(255, 100, 30)
とかってできます。それで、RGBを使わずに数値に置き換えることも可能です。
ロング型の整数を入れてあげれば良いみたいです。ここではテキストをロング型に変換して設定しています。
'値は上のとイコールじゃないです Cells(1, 1).Interior.Color = CLng("123456")
それで、AS3とかJavaScriptだとRGBを整数に変換するときはこうなると思います。
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)はそのままなんですね。
var rgb:int = red + green * 256 + blue * 256 * 256; //ビット演算を使うとこうゆう風にも書ける var rgb:int = red | green << 8 | blue << 16;
ビットマップデータBitmapDataからExcelのRGB用のCSVテキストに変換する
というわけでビットマップデータからCSVに変換するやつを書いてみました。
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スタンプ作りました!
毎日使える。とぼけたウサギ