画像を読む 07

画像データを macOSのスピーチ機能で読むプログラムを書いています。前ページでも書いたように、開発の大体の方向はありますが、最終的な形を現在考えている訳ではありません。制作ノートと思って読んでください。



バイナリを10進数に

少し違った方向に来てしまったようで、「04 モザイクのデータ」に戻って考え直して見ます。

「04 モザイクのデータ」では、モザイクをクリックした時に、そのRGB値を読み上げるスクリプトを書きました。もう一度そのスクリプトを書き出してみます。

モザイク・イメージ内に書く

on mouseUp
  get the mouseColor --RGB値をitに収納 
  -- カラーを示すサンプル・グラフィックをitのRGB値に
  set the backgroundColor of grc "testColor" to it
  -- RGB値をその右のフィールドに入れる
  put it into fld "tRGB" 
  -- 読み上げた時カンマの位取りを間違えないよう、カンマの後にスペースを入れる
  replace comma with comma & space in it  
  
   -- カスタム・コマンドで「the mouseColor」で得たRGB値を読み上げる
  readText it 
end mouseUp

スタックに書いたカスタム・コマンド「readText」

command readText pText
   put item 1 of the label of btn "tName" of stack "speechImage" \
         into tName  -- スピーチする名前を「tName」に
   put the hilitedButtonName of grp "readSpeed"of stack "speechImage" \
         into tSpeed  -- スピーチのスピードを「tSpeed」に
   
   -- 1000の位取りを読み間違えないように、カンマの後にスペースを入れる
   replace comma with ", " in pText
   revSetSpeechVoice tName
   revSetSpeechSpeed tSpeed
   revSetSpeechVolume 130
   revspeak pText
end readText


もう一つ重要なスクリプトは、スライド・バー内に書いたモザイク・サイズを変更した際に、すべてのモザイクのバイナリを読み取って上にあるテキスト・フィールドに書き込むスクリプトです。「02 モザイク」の最後に「以下のスクリプトは、スクロール・バーに書き込みます。 」とある箇所です。今はモザイクのサイズ変更に伴って、バイナリーが書き出されるとだけ理解できれば良いでしょう。スクロール・バーを1パーセントにした場合の、私のイメージから作られたモザイクのバイナリーを書くと、以下になります。

4x3(ピクセル数)のモザイクのバイナリ数は
1つのピクセルが4つのバイナリで構成されているので、4x3x4=48文字あります

ˇ21ˇ&5ˇ	ˇ’æ^ˇtÉ>ˇqä/ˇ!ˇ8]ˇéòYˇ.8ˇπ¥`ˇ-R

モザイクの横列を「row」、たて列は「column」と考える配列(array)と考えます。配列(array)の説明は「LiveCode 6プログラミング 初心者開発入門」にあります。http://kenjikojima.com/livecode/16tableArray.html

ボタン「binaryToDigimal」に、マウスアップ・ハンドラーにコマンド「mosaicColorArray』と
プライベイト・コマンド「mosaicColorArray』を書く

on mouseUp
   mosaicColorArray
   set the backgroundColor of grc "testColor"  \
   		to the backgroundColor of this cd
   put "" into fld "tRGB"
end mouseUp

-- 次の「speechDecimal」の為に
-- 「mosaicColorArray」の最後の行「tColorArray」を配列のグローバルにしておく
global gColorArray   

private command mosaicColorArray
   -- イメージ「dropImageS」のイメージ・データ(総バイナリ)
   put the imagedata of image "dropImageS" of stack "speechImage" into tBinary 
   -- バイナリ総数を tLength に
   put the length of tBinary into tLength
   
   -- バイナリの横の並び数 (row)
   put the width of image "dropImageS" of stack "speechImage" into tWidthS
   -- バイナリの縦の数 (column)
   put the height of image "dropImageS" of stack "speechImage" into tHeightS
   
   -- 横列の数で区切り(業替え cr)を入れる為のカウントのイニシャライズ
   put 0 into tCount
   
   -- 1ピクセルの色彩値が4文字のバイナリから成り立っているので
   repeat with i = 1 to (tLength - 4) step 4  
      add 1 to tCount  -- 4文字ごとにカウントを1増やす
      
      -- カウントが横のバイナリ数になったら
      if tCount = tWidthS then 
         put cr into tConj  -- 行替え
         put 0 into tCount  -- カウントを0に
         
      -- それ以外はタブで4文字ごとのアキを作る
      else 
         put tab into tConj 
      end if
      
      -- 4文字まとめてバイナリ文字をナンバーに変換
      put charToNum(char i of tBinary) & comma & \
            charToNum(char (i + 1)  of tBinary) & comma & \
            charToNum(char (i + 2) of tBinary) & comma & \
            charToNum(char (i + 3) of tBinary)  & tConj after tMosaicColor
   end repeat  -- リピート終わり
   
   put tMosaicColor into fld "tBinary"  -- RGB numbers 
   put "Decimal" into fld "convertTitle" 
   put tMosaicColor into tColorArray
   split gColorArray by column  -- 次で使えるように配列をグローバルにする
end mosaicColorArray

10進数のRGBカラーをスピーチするボタン「speechDecimal」のスクリプト

global gColorArray  -- ボタン「binaryToDigimal」で作った配列を使う

on mouseUp
   set the cursor to watch
   set itemDel to tab
   put the num of items of gColorArray[1] into tHnum
   put the keys of gColorArray into tKeys
   put num of lines of tKeys into tVNum
   repeat with v=1 to tVNum
      repeat with h=1 to tHnum
         if the mouseClick then 
            set the backgroundColor of grc "speechColor" \
                  to the backgroundColor of this cd
            put "" into fld "tRGB"
            exit to top
         end if
         put item h of gColorArray[v] into tHColors
         put char offset(comma, tHColors)+ 1 to -1 of tHColors into tRGB
         set the backgroundColor of grc "speechColor" to tRGB
         put tRGB into fld "tRGB"
         readText tRGB
         wait 260
      end repeat
      set the backgroundColor of grc "speechColor" \
            to the backgroundColor of this cd
      put "" into fld "tRGB"
   end repeat
end mouseUp


実は厳密にいうと、イメージ「dropImageS」で得られるバイナリと、イメージ「dropImage」のモザイクとは微妙な色彩の差がりますが、ここではその調整は行わないで、イメージ「dropImageS」のデータを基調に進めてゆきます。



カラーキューブ

ピクセル・カラー ポエト




アーチスト:小島健治 / Artist: Kenji Kojima

アーチスト:小島健治
kenjikojima.com


クリエイティブ・コモンズ
Attribution-NonCommercial-NoDerivatives

Click and Go to PayPal

日本からのドネーションは こちらをクリック

LiveCode 6 初心者開発入門