Python電卓を使ってみよう 第10回 写真・画像を表示する

2025年5月22日(木)11時55分 マイナビニュース


今回は画像を表示してみます。画像といってもグラフや幾何学模様ではありません。写真やアイコンなどの画像です。電卓画面上に自由にさまざまな画像を表示できれば役に立つことがあるかもしれません。と書きつつ単純に画像を電卓上に表示してみたい、というだけですが実際には様々な制限があり好きな画像を表示するのは困難です。
 そんな困難なことに挑戦するのも時にはよいのではないでしょうか。電卓の限界等に挑戦することで何ができて何ができないのか、自分の技術がどこまであるのかを知るよい機会になります。なお、画像関係は奥が深いのでここではフルカラーグラフィックで写真を表示し、それ以外の表示方法については簡単なサンプルを提示するだけにします。
 なお、fx-CG50には写真・画像を表示するPicture Plot機能があります。ただし、独自画像形式の3gpなので画像変換ソフトなどを使わないと自由に画像は表示できないようです。
○fx-CG50の制限
 最初に知っておくのはfx-CG50の制限です。まず、液晶画面に表示できる画像サイズは384×192ピクセルです。これは、これまでのグラフィック描画でも扱ってきたので問題ないでしょう。画像表示の速度に関しては期待するほど速くありませんが、これはハード的な問題もあるので妥協するしかありません。
 fx-CG50の限界で厳しいのが1行が255文字、最大300行までということです。マニュアルには、この制限を超えるpyファイルも実行できることがあると記載がありますが、やはり制限内でプログラムを作成するのがよいでしょう。
 次に画像を扱うにあたってfx-CG50では画像ファイルを読み込むことができないようです。マニュアルを見てもPythonのファイル処理を試しに書いてみても動かないみたいなので画像ファイルを読み込んで表示する方法は諦めるしかないようです。ファイルとして読み込めるのはpyファイルのみなので、これを上手に利用するのがよさそうです。
 直接画像ファイルを扱えないため、表示したい画像データをfx-CG50のPythonで扱える1行255文字、300行に収めるように作る、もしくは変換する必要があります。
○タプルに入れた画像データを表示
 それでは簡単な画像を表示してみます。タプルに画素のRGBの色情報を入れておき、それらを順番に表示していくことで画像を表示します。例えば赤色を示す1画素分のデータ(タプル型)は以下のようにします。
(255,0,0)
次に横1行分の画素データを入れ子(ネスト)にします。
((255,0,0),(0,255,0),(0,0,255))
表示したい行数の数だけ書きます。3ピクセル×2行分だと以下のようになります。
((255,0,0),(0,255,0),(0,0,255)),
((0,0,255),(255,0,0),(0,255,0))
あとは、これら全体を入れ子にすればできあがりです。以下のようになります。
data=(
((255,0,0),(0,255,0),(0,0,255)),
((0,0,255),(255,0,0),(0,255,0))
)
 あとはプログラムでdata内容を順番に読んでいきset_pixel()で点を表示すればできあがりです。
 実際のプログラムは以下のようになります。
from casioplot import *
data=(
((255,0,0),(0,255,0),(0,0,255)),
((0,0,255),(255,0,0),(0,255,0))
)
clear_screen()
for y in range(len(data)):
for x in range(len(data[y])):
p=data[y][x]
set_pixel(x,y,(p[0],p[1],p[2]))
show_screen()
 これまでと同様にパソコン側でファイルを作成しておき、電卓に転送します。ファイル名はI1.pyとしてあります。実行すると図のようになります。6ピクセルなので拡大しないとわからないかもしれません。図では拡大してみやすくしてあります。
○富士山の画像を表示
 それでは本格的な(?)画像を表示してみましょう。表示するのは以下の富士山の画像です。96×48ピクセルサイズです。
 富士山・・・の画像ということで話を進めます。フルカラーで綺麗な画像を表示すると思っていた人もいるかもしれません。頑張ればできますが、ここでは都合により、このような感じの富士山になっています。その大きな理由は1行の文字数制限です。255文字までという制限がかなりきつい状態です。例えば1ピクセルが白色の場合、タプルでRGB輝度で表現すると以下のようになります。
(255,255,255)
13文字必要でさらに以後にデータが続く場合は,も必要になります。つまり1ピクセルあたり14文字必要ということになります。255文字÷14文字=18.214...、つまり18ピクセルまでという計算になります。データ形式を工夫してフラットな一次元にしたとしても63ピクセル程度です。これでは、大きな画像は表示できません。
そこで、画像データを圧縮することにします。富士山の画像がイマイチなのはデータ圧縮しやすいようになっているからです。データ圧縮は最もシンプルなランレングス方式です。これは同じピクセルがいくつ続くかをカウントし、それをデータ内に入れておくという方法です。
富士山の画像では上の方は同じ青色になっています。横96ピクセル全部同じなので以下のようになります。最初にピクセルの長さ、あとはRGBの輝度です。
(96,1,104,183)
このようにすれば255文字制限も何とか回避できます。とはいえ、複雑な画像ではランレングスは効果がありません。ですので、ここで扱う富士山の画像がイマイチになってしまったわけです。
実際のデータとプログラムは以下のようになります。データ節約のため横1行単位での入れ子にはしていません。
from casioplot import *
d=(
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(44,1,104,183),(10,255,255,255),(42,1,104,183),
(42,1,104,183),(14,255,255,255),(40,1,104,183),
(40,1,104,183),(18,255,255,255),(38,1,104,183),
(38,1,104,183),(21,255,255,255),(37,1,104,183),
(36,1,104,183),(25,255,255,255),(35,1,104,183),
(34,1,104,183),(28,255,255,255),(34,1,104,183),
(32,1,104,183),(6,255,255,255),(1,255,251,248),(7,255,255,255),(1,234,226,233),(4,255,255,255),(1,234,226,233),(11,255,255,255),(33,1,104,183),
(30,1,104,183),(7,255,255,255),(1,246,243,245),(8,255,255,255),(1,234,226,233),(4, 255,255,255),(2,234,226,233),(12,255,255,255),(31,1,104,183),
(28,1,104,183),(8,255,255,255),(1,240,233,240),(8,255,255,255),(2,234,226,233),(4,255,255,255),(3,234,226,233),(3,255,255,255),(2,212,205,213),(8,255,255,255),(29,1,104,183),
(26,1,104,183),(18,255,255,255),(3,234,226,233),(3,255,255,255),(5,92,110,143),(2,255,255,255),(11,212,205,213),(28,1,104,183),
(24,1,104,183),(20,255,255,255),(2,234,226,233),(17,92,110,143),(1,99,113,146),(5,156,160,184),(27,1,104,183),
(22,1,104,183),(4,255,255,255),(17,196,196,210),(24,99,113,146),(3,156,160,184),(26,1,104,183),
(20,1,104,183),(48,86,103,128),(5,156,160,184),(23,1,104,183),
(12,1,104,183),(6,83,95,131),(53,80,96,131),(4,134,137,167),(21,1,104,183),
(15,83,82,98),(5,83,95,131),(54,69,87,118),(3,134,137,167),(19,1,104,183),
(17,83,82,98),(59,69,87,118),(4,134,137,167),(13,1,104,183),(3,38,40,53),
(17,83,82,98),(61,69,87,118),(4,134,137,167),(9,1,104,183),(5,38,40,53),
(15,83,82,98),(7,100,95,109),(50,69,87,118),(13,38,40,53),(5,1,104,183),(6,38,40,53),
(16,83,82,98),(9,100,95,109),(46,69,87,118),(25,38,40,53),
(17,83,82,98),(18,100,95,109),(34,69,87,118),(27,38,40,53),
(18,83,82,98),(46,100,95,109),(32,38,40,53),
(19,66,65,83),(44,85,83,95),(33,38,40,53),
(20,66,65,83),(41,85,83,95),(21,38,40,53),(14,21,30,55),
(57,66,65,83),(20,38,40,53),(19,21,30,55),
(56,36,36,47),(20,38,40,53),(20,21,30,55),
(56,36,36,47),(19,38,40,53),(21,21,30,55),
(55,57,51,63),(20,38,40,53),(21,21,30,55),
(55,57,51,63),(19,38,40,53),(22,21,30,55),
(82,57,51,63),(14,1,14,46),
(81,57,51,63),(15,1,14,46),
(80,55,72,94),(16,1,14,46),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
)
clear_screen()
x=0
y=0
for i in range(len(d)):
n=d[i][0]
for j in range(n):
set_pixel(x,y,(d[i][1],d[i][2],d[i][3]))
x=x+1
if x>95:
x=0
y=y+1
show_screen()
 これまでと同様にパソコン側でファイルを作成しておき、電卓に転送します。ファイル名はI2.pyとしてあります。実行すると図のようになります。画面の左上に富士山の画像が表示されます。
さすがに画像が小さすぎるので、4倍に拡大して表示してみましょう。set_pixel()で4つ分の点を表示すればできあがりです。実際のプログラムは以下のようになります。scale=4の4を2にすると2倍に、3なら3倍に拡大表示されます。
from casioplot import *
d=(
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(96,1,104,183),
(44,1,104,183),(10,255,255,255),(42,1,104,183),
(42,1,104,183),(14,255,255,255),(40,1,104,183),
(40,1,104,183),(18,255,255,255),(38,1,104,183),
(38,1,104,183),(21,255,255,255),(37,1,104,183),
(36,1,104,183),(25,255,255,255),(35,1,104,183),
(34,1,104,183),(28,255,255,255),(34,1,104,183),
(32,1,104,183),(6,255,255,255),(1,255,251,248),(7,255,255,255),(1,234,226,233),(4,255,255,255),(1,234,226,233),(11,255,255,255),(33,1,104,183),
(30,1,104,183),(7,255,255,255),(1,246,243,245),(8,255,255,255),(1,234,226,233),(4,255,255,255),(2,234,226,233),(12,255,255,255),(31,1,104,183),
(28,1,104,183),(8,255,255,255),(1,240,233,240),(8,255,255,255),(2,234,226,233),(4,255,255,255),(3,234,226,233),(3,255,255,255),(2,212,205,213),(8,255,255,255),(29,1,104,183),
(26,1,104,183),(18,255,255,255),(3,234,226,233),(3,255,255,255),(5,92,110,143),(2,255,255,255),(11,212,205,213),(28,1,104,183),
(24,1,104,183),(20,255,255,255),(2,234,226,233),(17,92,110,143),(1,99,113,146),(5,156,160,184),(27,1,104,183),
(22,1,104,183),(4,255,255,255),(17,196,196,210),(24,99,113,146),(3,156,160,184),(26,1,104,183),
(20,1,104,183),(48,86,103,128),(5,156,160,184),(23,1,104,183),
(12,1,104,183),(6,83,95,131),(53,80,96,131),(4,134,137,167),(21,1,104,183),
(15,83,82,98),(5,83,95,131),(54,69,87,118),(3,134,137,167),(19,1,104,183),
(17,83,82,98),(59,69,87,118),(4,134,137,167),(13,1,104,183),(3,38,40,53),
(17,83,82,98),(61,69,87,118),(4,134,137,167),(9,1,104,183),(5,38,40,53),
(15,83,82,98),(7,100,95,109),(50,69,87,118),(13,38,40,53),(5,1,104,183),(6,38,40,53),
(16,83,82,98),(9,100,95,109),(46,69,87,118),(25,38,40,53),
(17,83,82,98),(18,100,95,109),(34,69,87,118),(27,38,40,53),
(18,83,82,98),(46,100,95,109),(32,38,40,53),
(19,66,65,83),(44,85,83,95),(33,38,40,53),
(20,66,65,83),(41,85,83,95),(21,38,40,53),(14,21,30,55),
(57,66,65,83),(20,38,40,53),(19,21,30,55),
(56,36,36,47),(20,38,40,53),(20,21,30,55),
(56,36,36,47),(19,38,40,53),(21,21,30,55),
(55,57,51,63),(20,38,40,53),(21,21,30,55),
(55,57,51,63),(19,38,40,53),(22,21,30,55),
(82,57,51,63),(14,1,14,46),
(81,57,51,63),(15,1,14,46),
(80,55,72,94),(16,1,14,46),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
(96,16,49,82),
)
clear_screen()
x=0
y=0
scale=4
for i in range(len(d)):
n=d[i][0]
for j in range(n):
c=(d[i][1],d[i][2],d[i][3])
for py in range(scale):
for px in range(scale):
set_pixel(x*scale+px,y*scale+py,c)
x=x+1
if x>95:
x=0
y=y+1
show_screen()
 これまでと同様にパソコン側でファイルを作成しておき、電卓に転送します。ファイル名はI3.pyとしてあります。実行すると図のようになります。画面全体に富士山の画像が表示されます。
○グレースケール画像の場合
 フルカラー画像は容量的に厳しいので今度はグレースケール画像を表示してみます。フルカラーと比べてデータ量は1/3です。とは言え横255文字までなので計算上63ピクセルあたりが限度です。今回は安全のため縦横48ピクセルにサイズを固定して画像を表示します。
 データサイズを小さくするために1次元のタプルにするとメモリ不足で動作しません。そこで、タプルを入れ子にして対処します。
 まず、シンプルなデータでテストしてみます。以下のプログラムは左上にグレースケールのグラデーションバーを描きます。
from casioplot import *
data=(
(0,40,80,120,160, 200,240,200,160,120,80,40,0),
(20,60,100,140,180, 220,255,220,180,140,100,60,0),
)
clear_screen()
for y in range(len(data)):
for x in range(len(data[y])):
p=data[y][x]
set_pixel(x,y,(p,p,p))
show_screen()
 これまでと同様にパソコン側でファイルを作成しておき、電卓に転送します。ファイル名はI4.pyとしてあります。実行すると図のようになります。画面全体に富士山の画像が表示されます。
 グレースケールデータさえ用意すればよさそうなので、今度は頑張って女の子の画像を表示してみます。以下のプログラムは48×48ピクセルの画像を左上に表示します。
from casioplot import *
data=(
(29,72,56,38,38,38,41,38,69,58,40,45,43,43,48,48,55,46,58,57,58,60,58,60,60,60,60,60,60,61,58,53,57,57,51,42,46,45,42,34,48,38,37,56,139,155,155,154),
(47,65,43,36,38,36,31,60,58,38,45,41,43,46,47,53,43,53,58,58,62,58,60,58,58,58,56,57,60,53,48,50,48,51,46,40,41,43,40,31,45,41,38,35,105,160,155,155),
(53,48,36,35,37,33,38,56,40,43,43,42,45,46,51,47,47,57,60,62,60,66,61,58,57,57,55,58,57,53,50,48,46,52,47,40,40,41,38,33,40,43,38,37,58,149,159,158),
(51,37,36,35,35,31,43,40,43,43,42,43,47,47,50,40,55,56,60,58,77,72,68,61,58,57,56,62,56,53,48,48,48,55,50,45,42,43,42,38,36,43,40,38,33,111,163,158),
(46,33,36,35,31,37,43,40,43,42,41,45,46,52,42,46,51,56,53,72,85,87,76,66,63,55,57,63,58,57,50,48,53,63,51,48,46,46,48,48,42,46,40,40,35,61,154,160),
(38,31,38,35,31,40,38,42,42,42,43,45,48,50,38,50,53,51,57,63,67,79,85,77,74,45,75,66,68,68,60,58,67,67,51,50,56,56,55,58,48,51,43,43,41,33,117,165),
(36,29,36,33,38,38,38,41,41,43,43,46,52,42,41,48,48,50,53,51,60,57,66,84,55,45,81,58,84,86,87,85,70,70,56,52,60,63,61,63,53,53,48,47,48,51,70,154),
(35,29,33,35,38,35,38,43,43,43,45,46,51,35,45,47,45,48,51,55,52,48,56,63,34,56,66,53,90,91,92,80,62,77,65,53,58,63,65,68,56,52,50,46,48,70,71,120),
(33,26,34,36,33,37,40,43,43,43,47,50,45,38,45,41,48,51,52,50,45,47,57,41,66,63,51,57,72,72,70,58,63,71,63,50,56,60,58,60,53,51,51,46,48,66,102,87),
(33,26,37,35,31,36,38,43,45,45,45,51,38,42,40,46,50,53,48,42,45,53,47,77,101,56,45,56,58,57,55,50,60,55,60,41,48,57,53,51,50,50,50,45,48,55,117,110),
(35,26,31,31,26,38,40,45,45,45,47,48,35,40,43,51,53,47,34,74,63,52,63,144,92,46,43,51,53,52,48,50,48,48,50,67,55,50,45,46,45,46,50,43,47,51,110,155),
(35,28,33,23,29,38,41,45,43,45,48,43,37,40,53,53,45,31,106,111,53,45,126,170,79,43,48,48,55,51,48,48,46,48,42,100,62,43,40,43,41,45,46,43,45,45,92,169),
(33,33,31,13,35,38,45,45,43,47,53,38,40,50,56,42,47,136,150,65,43,111,183,160,55,67,62,53,55,50,50,47,50,45,53,134,68,40,38,43,40,43,46,43,41,42,87,167),
(26,31,18,15,37,40,43,45,43,48,55,35,43,52,45,67,133,145,76,37,105,187,193,130,43,112,60,58,57,51,48,50,48,40,77,163,82,35,37,42,38,42,47,41,42,40,75,160),
(18,25,1,6,41,41,43,45,43,50,56,35,47,47,92,165,175,92,40,80,112,175,185,75,102,133,55,63,58,55,53,55,48,41,114,178,101,31,37,42,36,41,43,40,41,40,58,150),
(10,15,101,117,43,40,43,45,43,53,55,40,56,111,173,169,94,51,119,178,159,124,114,70,163,107,58,65,62,55,55,48,77,57,150,185,109,31,38,40,36,43,43,40,40,38,37,129),
(1,82,152,124,42,42,43,45,48,58,53,57,97,102,106,80,81,138,178,188,190,172,81,138,165,74,68,67,57,56,58,63,115,82,183,188,109,31,43,38,38,41,42,40,36,61,53,106),
(15,117,119,84,38,43,45,45,53,63,50,61,72,35,33,38,69,107,143,168,174,111,114,183,121,58,69,60,57,65,51,126,107,117,184,189,105,47,58,38,36,42,42,38,31,77,100,109),
(38,121,139,82,37,43,48,43,56,66,48,40,42,60,63,60,26,29,53,122,122,120,175,178,87,63,62,60,69,67,86,162,96,148,141,131,63,90,71,36,35,43,40,38,31,77,116,132),
(40,117,145,65,38,45,48,46,57,67,74,68,77,127,63,99,111,43,63,43,120,160,183,131,53,68,96,84,84,63,152,127,145,190,189,148,58,105,60,38,37,45,40,38,35,51,121,157),
(48,82,134,53,42,48,53,53,57,61,102,168,135,95,117,110,140,89,107,102,111,174,139,61,94,139,117,81,85,140,149,135,188,188,187,112,126,145,46,38,40,43,41,37,40,40,127,175),
(97,38,91,55,43,47,56,58,55,61,102,188,190,139,147,150,148,138,182,180,160,160,120,150,182,140,95,115,162,162,134,130,115,112,104,97,175,144,45,34,48,45,38,33,40,48,149,180),
(158,45,31,57,45,50,57,65,57,61,85,178,185,175,155,160,158,167,184,184,189,185,189,190,148,122,159,173,173,153,82,38,38,42,36,70,138,127,35,40,51,47,33,36,37,62,159,174),
(210,86,18,48,45,51,57,67,63,66,87,157,182,175,175,172,175,182,184,188,189,189,187,180,175,185,180,179,184,115,62,87,97,72,82,42,80,92,34,53,48,40,36,33,58,82,139,127),
(215,76,6,34,43,48,55,67,71,70,122,125,180,170,170,173,175,179,184,188,195,202,200,200,195,194,188,189,184,145,132,114,127,119,159,70,48,52,45,51,38,42,43,31,69,117,179,179),
(177,102,127,20,42,48,55,63,72,68,153,122,160,177,173,173,175,179,184,190,199,203,194,194,210,209,190,190,189,162,154,152,140,187,177,75,69,55,50,29,41,48,43,31,53,150,179,182),
(130,172,209,58,35,43,52,58,68,72,145,170,129,174,175,177,179,182,187,190,192,188,187,210,230,217,190,190,189,177,165,154,169,180,145,150,132,45,25,35,48,52,37,26,84,170,177,182),
(125,212,205,67,35,42,51,53,48,76,124,190,164,147,180,183,185,188,190,190,189,189,190,210,227,213,187,190,187,185,185,183,180,175,179,167,91,38,37,43,53,48,26,45,76,170,177,182),
(148,223,189,97,50,38,48,53,28,63,106,175,190,173,162,184,189,190,190,193,193,190,188,194,202,193,180,188,187,183,180,180,180,180,175,136,157,91,52,48,55,40,46,61,111,158,179,180),
(175,220,169,135,81,33,45,52,25,40,89,143,188,190,185,185,189,190,192,192,194,195,195,190,188,164,168,190,189,184,180,177,177,178,163,170,188,97,50,56,53,40,41,58,145,145,183,155),
(190,215,160,141,109,29,41,47,85,77,102,102,160,185,189,192,189,187,192,195,195,197,195,195,192,185,189,190,190,187,182,180,179,175,162,190,165,67,53,58,45,42,35,60,157,136,163,132),
(182,204,163,132,132,31,43,40,131,155,97,143,140,175,183,190,193,174,120,154,178,190,197,200,197,192,190,192,192,190,187,185,184,157,172,174,154,124,56,56,51,57,40,66,167,149,162,173),
(167,185,175,111,130,38,43,68,145,187,120,134,167,165,190,192,193,188,126,110,133,141,160,170,184,194,192,192,192,190,189,190,180,160,174,154,192,111,52,58,72,56,51,79,170,162,173,178),
(158,189,188,134,101,55,38,116,155,184,155,87,157,180,179,193,193,193,177,143,147,136,124,105,92,168,192,192,192,192,190,190,160,182,192,194,152,110,82,72,71,48,76,100,168,159,170,179),
(148,187,185,180,124,75,37,92,150,185,147,121,112,165,190,190,194,193,190,175,158,159,148,127,145,185,193,194,193,192,190,165,169,175,169,153,148,170,90,76,61,38,119,121,169,155,172,180),
(158,174,185,188,159,51,40,68,133,174,178,155,142,107,164,193,193,195,194,190,185,175,170,175,190,195,193,194,194,184,163,170,192,184,165,172,194,165,76,75,55,50,164,122,168,154,179,179),
(180,173,184,184,184,97,57,51,92,168,195,165,160,133,104,159,195,195,195,195,195,193,193,193,192,193,195,185,170,165,180,192,192,192,193,192,192,157,67,68,43,102,185,121,152,153,182,180),
(185,184,183,184,189,145,112,48,58,160,193,178,163,162,127,104,150,194,195,192,194,195,194,195,194,183,170,167,177,190,190,192,192,190,190,190,194,150,62,60,53,164,177,97,111,172,182,180),
(185,184,184,184,187,173,126,80,45,129,195,155,160,165,154,127,110,135,182,194,193,195,197,177,164,174,180,190,192,192,192,192,192,190,190,190,195,134,61,51,124,199,149,74,167,187,183,182),
(185,184,185,184,185,188,153,114,41,102,162,56,155,165,163,147,131,117,117,157,185,179,149,81,125,199,192,192,192,193,192,195,194,193,190,193,188,96,58,92,187,178,80,150,192,184,184,184),
(185,190,192,192,188,187,173,116,57,58,70,42,153,169,160,150,145,131,121,112,116,115,127,102,76,188,192,193,194,194,195,184,179,187,192,188,144,63,63,97,142,129,95,183,187,185,185,185),
(224,230,230,230,228,220,210,193,135,42,38,52,121,133,135,148,160,150,137,135,138,148,149,124,63,199,212,195,195,185,145,141,144,139,185,142,72,71,89,144,175,157,160,189,187,187,185,185),
(237,235,235,235,235,222,197,189,205,66,52,67,87,133,157,155,159,160,160,158,157,150,148,140,53,155,237,225,200,136,177,219,195,145,107,80,72,80,154,177,145,159,190,188,188,188,187,188),
(235,235,233,230,229,194,185,180,149,48,43,119,130,107,92,124,163,162,160,160,157,152,152,131,42,134,189,239,199,143,200,192,136,84,61,74,71,139,184,165,175,190,188,188,189,188,188,188),
(234,235,228,224,228,195,193,124,42,106,60,85,177,163,155,165,163,163,162,163,160,154,157,110,40,152,164,203,170,178,207,132,102,76,69,85,133,185,187,190,190,189,190,190,189,188,189,188),
(220,234,229,218,227,214,145,63,130,188,150,43,127,173,173,169,165,162,164,165,163,160,160,80,57,163,172,173,165,129,117,99,72,77,159,197,225,210,189,189,190,190,190,190,190,189,190,189),
(212,228,224,213,230,189,71,137,183,182,188,135,63,112,157,167,149,162,165,167,167,168,157,47,84,180,179,159,185,192,120,114,145,189,225,228,235,237,214,190,189,190,190,190,192,190,190,190),
(210,215,215,229,192,92,148,180,180,180,182,188,138,125,122,138,162,170,165,165,170,173,145,25,117,189,168,148,193,219,193,133,164,199,220,235,237,227,230,218,189,190,192,192,190,192,190,192)
)
clear_screen()
for y in range(48):
for x in range(48):
p=data[y][x]
set_pixel(x,y,(p,p,p))
show_screen()
 これまでと同様にパソコン側でファイルを作成しておき、電卓に転送します。ファイル名はI5.pyとしてあります。実行すると図のようになります。画面左上に女の子の画像が表示されます。
 左上に小さく表示するだけでは物足りないという人もいるかもしれません。以下のプログラムは4倍にピクセルを拡大して表示します。scale=4の4を2にすると2倍に、3なら3倍に拡大表示されます。
from casioplot import *
data=(
(29,72,56,38,38,38,41,38,69,58,40,45,43,43,48,48,55,46,58,57,58,60,58,60,60,60,60,60,60,61,58,53,57,57,51,42,46,45,42,34,48,38,37,56,139,155,155,154),
(47,65,43,36,38,36,31,60,58,38,45,41,43,46,47,53,43,53,58,58,62,58,60,58,58,58,56,57,60,53,48,50,48,51,46,40,41,43,40,31,45,41,38,35,105,160,155,155),
(53,48,36,35,37,33,38,56,40,43,43,42,45,46,51,47,47,57,60,62,60,66,61,58,57,57,55,58,57,53,50,48,46,52,47,40,40,41,38,33,40,43,38,37,58,149,159,158),
(51,37,36,35,35,31,43,40,43,43,42,43,47,47,50,40,55,56,60,58,77,72,68,61,58,57,56,62,56,53,48,48,48,55,50,45,42,43,42,38,36,43,40,38,33,111,163,158),
(46,33,36,35,31,37,43,40,43,42,41,45,46,52,42,46,51,56,53,72,85,87,76,66,63,55,57,63,58,57,50,48,53,63,51,48,46,46,48,48,42,46,40,40,35,61,154,160),
(38,31,38,35,31,40,38,42,42,42,43,45,48,50,38,50,53,51,57,63,67,79,85,77,74,45,75,66,68,68,60,58,67,67,51,50,56,56,55,58,48,51,43,43,41,33,117,165),
(36,29,36,33,38,38,38,41,41,43,43,46,52,42,41,48,48,50,53,51,60,57,66,84,55,45,81,58,84,86,87,85,70,70,56,52,60,63,61,63,53,53,48,47,48,51,70,154),
(35,29,33,35,38,35,38,43,43,43,45,46,51,35,45,47,45,48,51,55,52,48,56,63,34,56,66,53,90,91,92,80,62,77,65,53,58,63,65,68,56,52,50,46,48,70,71,120),
(33,26,34,36,33,37,40,43,43,43,47,50,45,38,45,41,48,51,52,50,45,47,57,41,66,63,51,57,72,72,70,58,63,71,63,50,56,60,58,60,53,51,51,46,48,66,102,87),
(33,26,37,35,31,36,38,43,45,45,45,51,38,42,40,46,50,53,48,42,45,53,47,77,101,56,45,56,58,57,55,50,60,55,60,41,48,57,53,51,50,50,50,45,48,55,117,110),
(35,26,31,31,26,38,40,45,45,45,47,48,35,40,43,51,53,47,34,74,63,52,63,144,92,46,43,51,53,52,48,50,48,48,50,67,55,50,45,46,45,46,50,43,47,51,110,155),
(35,28,33,23,29,38,41,45,43,45,48,43,37,40,53,53,45,31,106,111,53,45,126,170,79,43,48,48,55,51,48,48,46,48,42,100,62,43,40,43,41,45,46,43,45,45,92,169),
(33,33,31,13,35,38,45,45,43,47,53,38,40,50,56,42,47,136,150,65,43,111,183,160,55,67,62,53,55,50,50,47,50,45,53,134,68,40,38,43,40,43,46,43,41,42,87,167),
(26,31,18,15,37,40,43,45,43,48,55,35,43,52,45,67,133,145,76,37,105,187,193,130,43,112,60,58,57,51,48,50,48,40,77,163,82,35,37,42,38,42,47,41,42,40,75,160),
(18,25,1,6,41,41,43,45,43,50,56,35,47,47,92,165,175,92,40,80,112,175,185,75,102,133,55,63,58,55,53,55,48,41,114,178,101,31,37,42,36,41,43,40,41,40,58,150),
(10,15,101,117,43,40,43,45,43,53,55,40,56,111,173,169,94,51,119,178,159,124,114,70,163,107,58,65,62,55,55,48,77,57,150,185,109,31,38,40,36,43,43,40,40,38,37,129),
(1,82,152,124,42,42,43,45,48,58,53,57,97,102,106,80,81,138,178,188,190,172,81,138,165,74,68,67,57,56,58,63,115,82,183,188,109,31,43,38,38,41,42,40,36,61,53,106),
(15,117,119,84,38,43,45,45,53,63,50,61,72,35,33,38,69,107,143,168,174,111,114,183,121,58,69,60,57,65,51,126,107,117,184,189,105,47,58,38,36,42,42,38,31,77,100,109),
(38,121,139,82,37,43,48,43,56,66,48,40,42,60,63,60,26,29,53,122,122,120,175,178,87,63,62,60,69,67,86,162,96,148,141,131,63,90,71,36,35,43,40,38,31,77,116,132),
(40,117,145,65,38,45,48,46,57,67,74,68,77,127,63,99,111,43,63,43,120,160,183,131,53,68,96,84,84,63,152,127,145,190,189,148,58,105,60,38,37,45,40,38,35,51,121,157),
(48,82,134,53,42,48,53,53,57,61,102,168,135,95,117,110,140,89,107,102,111,174,139,61,94,139,117,81,85,140,149,135,188,188,187,112,126,145,46,38,40,43,41,37,40,40,127,175),
(97,38,91,55,43,47,56,58,55,61,102,188,190,139,147,150,148,138,182,180,160,160,120,150,182,140,95,115,162,162,134,130,115,112,104,97,175,144,45,34,48,45,38,33,40,48,149,180),
(158,45,31,57,45,50,57,65,57,61,85,178,185,175,155,160,158,167,184,184,189,185,189,190,148,122,159,173,173,153,82,38,38,42,36,70,138,127,35,40,51,47,33,36,37,62,159,174),
(210,86,18,48,45,51,57,67,63,66,87,157,182,175,175,172,175,182,184,188,189,189,187,180,175,185,180,179,184,115,62,87,97,72,82,42,80,92,34,53,48,40,36,33,58,82,139,127),
(215,76,6,34,43,48,55,67,71,70,122,125,180,170,170,173,175,179,184,188,195,202,200,200,195,194,188,189,184,145,132,114,127,119,159,70,48,52,45,51,38,42,43,31,69,117,179,179),
(177,102,127,20,42,48,55,63,72,68,153,122,160,177,173,173,175,179,184,190,199,203,194,194,210,209,190,190,189,162,154,152,140,187,177,75,69,55,50,29,41,48,43,31,53,150,179,182),
(130,172,209,58,35,43,52,58,68,72,145,170,129,174,175,177,179,182,187,190,192,188,187,210,230,217,190,190,189,177,165,154,169,180,145,150,132,45,25,35,48,52,37,26,84,170,177,182),
(125,212,205,67,35,42,51,53,48,76,124,190,164,147,180,183,185,188,190,190,189,189,190,210,227,213,187,190,187,185,185,183,180,175,179,167,91,38,37,43,53,48,26,45,76,170,177,182),
(148,223,189,97,50,38,48,53,28,63,106,175,190,173,162,184,189,190,190,193,193,190,188,194,202,193,180,188,187,183,180,180,180,180,175,136,157,91,52,48,55,40,46,61,111,158,179,180),
(175,220,169,135,81,33,45,52,25,40,89,143,188,190,185,185,189,190,192,192,194,195,195,190,188,164,168,190,189,184,180,177,177,178,163,170,188,97,50,56,53,40,41,58,145,145,183,155),
(190,215,160,141,109,29,41,47,85,77,102,102,160,185,189,192,189,187,192,195,195,197,195,195,192,185,189,190,190,187,182,180,179,175,162,190,165,67,53,58,45,42,35,60,157,136,163,132),
(182,204,163,132,132,31,43,40,131,155,97,143,140,175,183,190,193,174,120,154,178,190,197,200,197,192,190,192,192,190,187,185,184,157,172,174,154,124,56,56,51,57,40,66,167,149,162,173),
(167,185,175,111,130,38,43,68,145,187,120,134,167,165,190,192,193,188,126,110,133,141,160,170,184,194,192,192,192,190,189,190,180,160,174,154,192,111,52,58,72,56,51,79,170,162,173,178),
(158,189,188,134,101,55,38,116,155,184,155,87,157,180,179,193,193,193,177,143,147,136,124,105,92,168,192,192,192,192,190,190,160,182,192,194,152,110,82,72,71,48,76,100,168,159,170,179),
(148,187,185,180,124,75,37,92,150,185,147,121,112,165,190,190,194,193,190,175,158,159,148,127,145,185,193,194,193,192,190,165,169,175,169,153,148,170,90,76,61,38,119,121,169,155,172,180),
(158,174,185,188,159,51,40,68,133,174,178,155,142,107,164,193,193,195,194,190,185,175,170,175,190,195,193,194,194,184,163,170,192,184,165,172,194,165,76,75,55,50,164,122,168,154,179,179),
(180,173,184,184,184,97,57,51,92,168,195,165,160,133,104,159,195,195,195,195,195,193,193,193,192,193,195,185,170,165,180,192,192,192,193,192,192,157,67,68,43,102,185,121,152,153,182,180),
(185,184,183,184,189,145,112,48,58,160,193,178,163,162,127,104,150,194,195,192,194,195,194,195,194,183,170,167,177,190,190,192,192,190,190,190,194,150,62,60,53,164,177,97,111,172,182,180),
(185,184,184,184,187,173,126,80,45,129,195,155,160,165,154,127,110,135,182,194,193,195,197,177,164,174,180,190,192,192,192,192,192,190,190,190,195,134,61,51,124,199,149,74,167,187,183,182),
(185,184,185,184,185,188,153,114,41,102,162,56,155,165,163,147,131,117,117,157,185,179,149,81,125,199,192,192,192,193,192,195,194,193,190,193,188,96,58,92,187,178,80,150,192,184,184,184),
(185,190,192,192,188,187,173,116,57,58,70,42,153,169,160,150,145,131,121,112,116,115,127,102,76,188,192,193,194,194,195,184,179,187,192,188,144,63,63,97,142,129,95,183,187,185,185,185),
(224,230,230,230,228,220,210,193,135,42,38,52,121,133,135,148,160,150,137,135,138,148,149,124,63,199,212,195,195,185,145,141,144,139,185,142,72,71,89,144,175,157,160,189,187,187,185,185),
(237,235,235,235,235,222,197,189,205,66,52,67,87,133,157,155,159,160,160,158,157,150,148,140,53,155,237,225,200,136,177,219,195,145,107,80,72,80,154,177,145,159,190,188,188,188,187,188),
(235,235,233,230,229,194,185,180,149,48,43,119,130,107,92,124,163,162,160,160,157,152,152,131,42,134,189,239,199,143,200,192,136,84,61,74,71,139,184,165,175,190,188,188,189,188,188,188),
(234,235,228,224,228,195,193,124,42,106,60,85,177,163,155,165,163,163,162,163,160,154,157,110,40,152,164,203,170,178,207,132,102,76,69,85,133,185,187,190,190,189,190,190,189,188,189,188),
(220,234,229,218,227,214,145,63,130,188,150,43,127,173,173,169,165,162,164,165,163,160,160,80,57,163,172,173,165,129,117,99,72,77,159,197,225,210,189,189,190,190,190,190,190,189,190,189),
(212,228,224,213,230,189,71,137,183,182,188,135,63,112,157,167,149,162,165,167,167,168,157,47,84,180,179,159,185,192,120,114,145,189,225,228,235,237,214,190,189,190,190,190,192,190,190,190),
(210,215,215,229,192,92,148,180,180,180,182,188,138,125,122,138,162,170,165,165,170,173,145,25,117,189,168,148,193,219,193,133,164,199,220,235,237,227,230,218,189,190,192,192,190,192,190,192)
)
clear_screen()
scale=4
for y in range(48):
for x in range(48):
p=data[y][x]
for py in range(scale):
for px in range(scale):
set_pixel(x*scale+px,y*scale+py,(p,p,p))
show_screen()
 これまでと同様にパソコン側でファイルを作成しておき、電卓に転送します。ファイル名はI6.pyとしてあります。実行すると図のようになります。大きく女の子の画像が表示されます。
 グレースケールよりもさらに高圧縮データにできるのが白黒で構成された白黒ビットマップ画像です。1バイトで8ピクセルを表現できます。興味ある方はぜひビットマップ画像の表示にも挑戦してみてください。
.

マイナビニュース

「電卓」をもっと詳しく

「電卓」のニュース

「電卓」のニュース

トピックス

x
BIGLOBE
トップへ