ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

データの読み取りと書き込み

ご利用の前に

多くのシリアル ポート アプリケーションにおいて、データの読み書きの際に考慮すべき 3 つの重要な疑問があります。

  • 読み書きを行う関数ブロックは MATLAB® コマンド ラインにアクセスするか

  • 送信されるデータはバイナリ (数値) あるいはテキストか

  • 読み書きの操作を完了する条件は何か

書き込みの操作に対するこれらの質問への回答は、データの書き込みにあります。読み取りの操作に対するこれらの質問への回答は、データの読み取りにあります。

例 — データの書き込みと読み取りについて

Windows® プラットフォームのシリアル ポート COM1 に接続されている Tektronix® TDS 210 2 チャネル オシロスコープの識別情報を返すものとします。これには、関数 fprintf を使用した *IDN? コマンドの機器への書き込みと、関数 fscanf を使用したそのコマンドの結果の読み取りが必要です。

s = serial('COM1');
fopen(s)
fprintf(s,'*IDN?')
out = fscanf(s)

結果の識別情報は、以下のとおりです。

out =
TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04

シリアル ポート セッションを終了します。

fclose(s)
delete(s)
clear s

MATLAB コマンド ラインへのアクセスの制御

読み取りあるいは書き込み操作が "同期" または "非同期" かどうかを指定することによって、MATLAB コマンド ラインへのアクセスを制御できます。

同期操作は、読み取りあるいは書き込み関数が実行を終了するまで、コマンド ラインへのアクセスを防ぎます。非同期操作は、コマンド ラインへのアクセスを制限せず、読み取りや書き込み関数をバックグランドで実行中にコマンドを実行できます。

用語 "同期" と "非同期" は、シリアル ポートがハードウェア レベルでどのように動作するかを説明するときにしばしば用いられます。RS-232 標準は、非同期通信プロトコルをサポートします。このプロトコルを使用して、各デバイスは独自の内部クロックを利用します。データ送信は、バイトのスタート ビットを使用して同期化され、1 つまたは複数のストップ ビットはバイトの終端を示します。スタート ビットとストップ ビットの詳細は、シリアル データ形式を参照してください。RS-232 標準は、送信されるすべてのビットが共有のクロック信号に同期化される同期モードもサポートします。

ハードウェア レベルでは、ほとんどのシリアル ポートは非同期的に動作します。ただし、読み取りおよび書き込み関数に対する既定の動作を使用して、同期シリアル ポートの操作に似せることができます。

メモ

このガイド内では "同期" と "非同期" は、読み取りや書き込み操作が MATLAB コマンド ラインへのアクセスをブロックするかどうかを示します。言い換えると、これらの用語はハードウェアの動作ではなくソフトウェアの動作を意味します。

データを非同期で書き込むあるいは読み取ることには 2 つの主な利点があります。

  • 書き込みまたは読み取り関数の実行中に他のコマンドを実行できます。

  • すべての対応コールバック プロパティを使用できます (イベントとコールバックを参照)。

たとえば、シリアル ポートは別々の読み取り用と書き込み用のピンをもつため、データの読み取りと書き込みを同時に行うことができます。これを次のダイアグラムに示します。

データの書き込み

この節は、データのシリアル ポート デバイスへの書き込みを 3 つの部分に分けて説明します。

以下の表は、データの書き込みに関連する関数を示しています。

データの書き込みに関連する関数

関数名説明

fprintf

テキストをデバイスに書き込みます。

fwrite

バイナリ データをデバイスに書き込みます。

stopasync

非同期の読み取りおよび書き込み操作を停止します。

以下の表は、データの書き込みに関連するプロパティを示しています。

データの書き込みに関連するプロパティ

プロパティ名説明

BytesToOutput

現在出力バッファーにあるバイト数

OutputBufferSize

出力バッファーのサイズ (バイト)

Timeout

読み取りまたは書き込みの操作完了までの待ち時間

TransferStatus

非同期の読み取りまたは書き込み操作が進行中かどうかを示します

ValuesSent

デバイスに書き込まれる値の総数

出力バッファーとデータ フロー

出力バッファーとは、デバイスに書き込まれるデータを格納するためにシリアル ポート オブジェクトによって割り当てられるコンピューター メモリのことです。データをデバイスに書き込む場合、データ フローは次の 2 つの手順を踏みます。

  1. 書き込み関数によって指定されたデータは、出力バッファーに送られます。

  2. 出力バッファー内のデータは、デバイスに送られます。

OutputBufferSize プロパティは、出力バッファーに格納可能な最大バイト数を指定します。BytesToOutput プロパティは、出力バッファーに現在あるバイト数を示します。これらのプロパティに対する既定値は、以下のとおりです。

s = serial('COM1');
get(s,{'OutputBufferSize','BytesToOutput'})
ans = 
    [512]    [0]

出力バッファーの容量以上のデータを書こうとした場合は、エラーが返され、データは書き込まれません。

たとえば、関数 fprintf を使用して文字列コマンド *IDN? を TDS 210 オシロスコープに書き込むと仮定します。次のダイアグラムに示すように、文字列は最初に 6 個の値として出力バッファーに書き込まれます。

*IDN? コマンドは、終端子が自動的に書き込まれるため、6 個の値で構成されます。さらに、関数 fprintf に対する既定のデータ形式は、1 つの値が 1 バイトに対応すると指定します。バイトと値の詳細については、バイトと値を参照してください。関数 fprintf および終端子についてはテキスト データの書き込みで説明します。

以下のダイアグラムに示すように、文字列は出力バッファーに書き込まれた後で、シリアル ポートによってデバイスに書き込まれます。

テキスト データの書き込み

テキスト データをデバイスに書き込むには、関数 fprintf を使用します。多くのデバイスの場合、テキスト データの書き込みとは文字列コマンドを書き込むことであり、これによってデバイスの設定変更や、デバイスがデータやステータス情報を返すための準備等が行なわれます。

たとえば、Display:Contrast コマンドはオシロスコープの表示のコントラストを変更します。

s = serial('COM1');
fopen(s)
fprintf(s,'Display:Contrast 45')

既定の設定では、多くのシリアル ポート デバイスがテキストベースのコマンドしか受け取らないため、関数 fprintf%s\n 形式を使用してデータを書き込みます。ただし、関数 fprintf のリファレンス ページで説明するように、その他の多くの形式を指定することができます。

デバイスに送信される値の数を確認するには、ValuesSent プロパティを使用します。

s.ValuesSent
ans =
    20

ValuesSent プロパティの値は、デバイスに送信されるコマンド内の \nTerminator プロパティの値で置き換えられるため、終端子を含みます。

s.Terminator
ans =
LF

Terminator の既定値は改行文字です。デバイスに対して必要な終端子は、デバイスのドキュメンテーションに記述されています。

同期および非同期の書き込み操作-  既定の設定では、関数 fprintf は同期的に実行されて実行が終了するまで MATLAB コマンド ラインをブロックします。テキスト データを非同期的にデバイスに書き込むには、関数 fprintf の最後の入力引数として async を指定しなければなりません。

fprintf(s,'Display:Contrast 45','async')

非同期操作は、MATLAB コマンド ラインへのアクセスをブロックしません。さらに、非同期の書き込み操作が進行中には、以下を行うことができます。

  • シリアル ポートは読み取りと書き込みに対して別々のピンをもつため、非同期の読み取り操作を行います。

  • サポートされているすべてのコールバック プロパティを利用します。

進行中の非同期処理を判別するには、TransferStatus プロパティを使用します。非同期操作が進行中でない場合、TransferStatusidle です。

s.TransferStatus
ans =
idle

fprintf による書き込み操作の完了-  fprintf を使った同期あるいは非同期の書き込み操作は、以下のときに終了します。

  • 指定したデータが書き込まれる

  • Timeout プロパティで指定した時間が経過する

非同期書き込み操作を停止するには、関数 stopasync を使用します。

終端子を書き込むための規則-  Terminator プロパティ値は cmd 内のすべての \n を置き換えます。このため、既定の形式 %s\n を使用する場合は、デバイスに書き込まれたすべてのコマンドがこのプロパティ値で終了します。デバイスで必要な終端子の詳細は、デバイスのドキュメンテーションを参照してください。

バイナリ データの書き込み

バイナリ データをデバイスに書き込むには、関数 fwrite を使用します。バイナリ データを書き込むことは、数値を書き込むことを意味します。バイナリ データの書き込みの典型的なアプリケーションには、任意波形発生器などの機器へのキャリブレーション データの書き込みがあります。

メモ

シリアル ポート デバイスの中には、テキストベースのコマンドしか受け取らないものがあります。これらのコマンドは、SCPI 言語またはベンダー固有の言語を利用する場合があります。そのため、すべての書き込み操作に対して関数 fprintf の使用が必要になる場合があります。

既定の設定では、関数 fwriteuchar の精度設定を使用して値を変換します。ただし、この関数のリファレンス ページで説明するように、他の多くの精度設定を指定することができます。

既定の設定では、関数 fwrite は同期的に動作します。バイナリ データを非同期的にデバイスに書き込むには、関数 fwrite の最後の入力引数として async を指定しなければなりません。同期および非同期書き込み操作の詳細は、テキスト データの書き込みを参照してください。書き込み操作を終了するために関数 fwrite で使用する規則については、リファレンス ページを参照してください。

一般的なエラーのトラブルシューティング

一般的な fprintf エラーを識別するために、以下の表を使用してください。

エラー発生する状況トラブルシューティング

???Error using ==> serial.fwrite at 199 OBJ は FOPEN を使用してハードウェアに接続されていなければなりません。

書き込み操作を実行していますが、シリアル ポート オブジェクトがデバイスに接続されていません。

デバイスへの接続を確立するには、関数 fopen を使用してください。

???Error using ==> serial.fwrite at 199 書き込まれたバイト数は OutputBufferSize-BytesToOutput 以下でなければなりません。

出力バッファーは書き込まれるすべてデータを保持できません。

OutputBufferSize プロパティを使用して、出力バッファーのサイズを指定します。

???Error using ==> serial.fwrite at 192 FWRITE を呼び出すことができません。FlowControl プロパティは 'hardware' に設定され、Clear To Send (CTS) ピンが high になっています。これは、シリアル デバイスがオンではないことを示しており、接続されていないか、ハードウェア ハンドシェーキングを使用していない可能性があります。

  • シリアル オブジェクトの FlowControl プロパティを hardware に設定します。

  • デバイスが接続されていない、または接続済みのデバイスがデータ受信の準備ができていることをアサートしていません。

リモート デバイスのステータスおよびフロー制御設定をチェックして、ハードウェアのフロー制御が MATLAB でエラーの発生の原因となっていないかどうかを確認してください。

データの読み取り

この節では、シリアル ポート デバイスからのデータの読み取りについて 3 つの部分に分けて説明します。

以下の表は、データの読み取りに関連する関数を示しています。

データの読み取りに関連する関数

関数名説明

fgetl

デバイスからテキストを 1 行読み取り、終端子を破棄

fgets

デバイスからテキストを 1 行読み取り、終端子を含める

fread

デバイスからバイナリ データを読み取る

fscanf

デバイスからデータを読み取り、テキストとして書式を設定する

readasync

データをデバイスから非同期的に読み取る

stopasync

非同期の読み取りおよび書き込み操作を停止

以下の表は、データの読み取りに関連するプロパティを示しています。

データの読み取りに関連するプロパティ

プロパティ名説明

BytesAvailable

入力バッファーで利用可能なバイト数

InputBufferSize

入力バッファーのサイズ (バイト)

ReadAsyncMode

非同期の読み取り操作が連続的に行われるか、手動で行われるかを指定

Timeout

読み取りまたは書き込みの操作完了までの待ち時間

TransferStatus

非同期の読み取りまたは書き込み操作が進行中かどうかを示します

ValuesReceived

デバイスから読み取られる値の総数

入力バッファーとデータ フロー

入力バッファーとは、デバイスから読み取られるデータを格納するために、シリアル ポート オブジェクトによって割り当てられるコンピューター メモリのことです。デバイスからデータを読み取る場合に、データ フローは次の 2 つの手順に従います。

  1. デバイスから読み取られるデータは、入力バッファーに格納されます。

  2. 入力バッファー内のデータは、読み取り関数で指定された MATLAB 変数に返されます。

InputBufferSize プロパティは、入力バッファーに格納できる最大バイト数を指定します。BytesAvailable プロパティは、入力バッファーから現在読み取り可能なバイト数を示します。これらのプロパティに対する既定値は、以下のとおりです。

s = serial('COM1');
get(s,{'InputBufferSize','BytesAvailable'})
ans = 
    [512]    [0]

入力バッファーの容量以上のデータを読み取ろうとすると、エラーが出力され、データは読み取られません。

たとえば、関数 fscanf を使用して、TDS 210 オシロスコープに前に書き込まれた *IDN? コマンドのテキストベースの応答を読み取るとします。次のダイアグラムに示すように、テキスト データは、最初にシリアル ポートから入力バッファーに読み取られます。

指定した読み取り操作に対して、デバイスから返されたバイト数がわからない場合があります。そのため、シリアル ポート オブジェクトに接続する前に InputBufferSize プロパティを十分な大きさの値に設定する必要があります。

次のダイアグラムに示すように、データは入力バッファーに格納された後で、関数 fscanf によって指定された出力変数に送信されます。

テキスト データの読み取り

関数 fgetl、関数 fgets および関数 fscanf を使用してデバイスからデータを読み取り、データをテキストとして書式設定できます。

たとえば、オシロスコープの識別情報を返すと仮定します。これには、*IDN? コマンドを機器に書き込み、コマンドの結果を読み取る必要があります。

s = serial('COM1');
fopen(s)
fprintf(s,'*IDN?')
out = fscanf(s)
out =
TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04

既定の設定では、大半のシリアル ポート デバイスから返されるデータはテキストベースなので、関数 fscanf%c 形式を使用してデータを読み取ります。ただし、関数 fscanf のリファレンス ページで説明するように、その他の多くの形式を指定することができます。

デバイスから読み取られる値の数 (終端子を含む) を確認するには ValuesReceived プロパティを使用します。

s.ValuesReceived
ans =
    56

同期と非同期の読み取り操作-  読み取り操作が同期または非同期であるかを指定するには、ReadAsyncMode プロパティを使用します。ReadAsyncModecontinuous または manual に設定できます。

ReadAsyncModecontinuous (既定値) の場合、シリアル ポート オブジェクトはデータが読み取り可能かどうかを判断するために、デバイスに連続的にクエリを行います。データが読み取り可能な場合は、入力バッファーに非同期的に格納されます。データを入力バッファーから MATLAB へ送信するために、fgetl または fscanf などの同期的な (アクセスをブロックする) 読み取り関数のいずれかを使用します。入力バッファーでデータが読み取り可能の場合は、これらの関数は結果をすぐに返します。

s.ReadAsyncMode = 'continuous';
fprintf(s,'*IDN?')
s.BytesAvailable
ans =
    56
out = fscanf(s);

ReadAsyncModemanual の場合、シリアル ポート オブジェクトはデータが読み取り可能かどうかを判断するために連続的にデバイスにクエリを行いません。非同期でデータを読み取るには、関数 readasync を使用します。その後で、同期読み取り関数を使用してデータを入力バッファーから MATLAB に送信します。

s.ReadAsyncMode = 'manual';
fprintf(s,'*IDN?')
s.BytesAvailable
ans =
    0
readasync(s)
s.BytesAvailable
ans =
    56
out = fscanf(s);

非同期操作は、MATLAB コマンド ラインへのアクセスをブロックしません。さらに、非同期の読み取り操作の進行中には、以下を行うことができます。

  • シリアル ポートは読み取りと書き込みに対して別々のピンをもつため、非同期の書き込み操作を行います。

  • サポートされているすべてのコールバック プロパティを利用します。

進行中の非同期処理を判別するには、TransferStatus プロパティを使用します。非同期操作が進行中でない場合、TransferStatusidle です。

s.TransferStatus
ans =
idle

fscanf を使用して読み取り操作を完了するための規則-  fscanf を使用した読み取り操作では、以下の状態になるまで、MATLAB コマンド ラインへのアクセスができなくなります。

  • Terminator プロパティにより指定された終端子が読み取られる

  • Timeout プロパティで指定した時間が経過する

  • 指定された値の指定された数が読み取られる

  • 入力バッファーが満杯になる

バイナリ データの読み取り

バイナリ データをデバイスから読み取るためには、関数 fread を使用します。バイナリ データを読み取ることは、MATLAB に数値を返すことを意味します。

たとえば、オシロスコープのカーソルと表示の設定を返すとします。これには、CURSOR? および DISPLAY? コマンドを機器に書き込み、コマンドの結果を読み取る必要があります。

s = serial('COM1');
fopen(s)
fprintf(s,'CURSOR?')
fprintf(s,'DISPLAY?')

ReadAsyncMode プロパティに対する既定値は continuous であるため、データはデバイスから読み取り可能になるとすぐに入力バッファーに非同期的に返されます。読み取られた値の数を確認するには、BytesAvailable プロパティを使用します。

s.BytesAvailable
ans =
    69

データを MATLAB に返すには、同期読み取り関数を使用します。ただし、関数 fgetl、関数 fgets または関数 fscanf を使用する場合は、入力バッファーに 2 つの終端子が格納されるため、関数を 2 回実行しなければなりません。すべてのデータを 1 つの関数呼び出しで MATLAB に返すには、fread を使用します。

out = fread(s,69);

既定の設定では、関数 fread は数値を倍精度配列で返します。ただし、関数 fread のリファレンス ページで説明するように、その他の多くの精度を指定することができます。数値データをテキストに変換するには、MATLAB 関数 char を使用します。

val = char(out)'
val =
HBARS;CH1;SECONDS;-1.0E-3;1.0E-3;VOLTS;-6.56E-1;6.24E-1
YT;DOTS;0;45

同期および非同期の読み取り操作の詳細は、テキスト データの読み取りを参照してください。読み取り操作を終了するために関数 fread で使用する規則については、リファレンス ページを参照してください。

例 — テキスト データの書き込みと読み取り

この例では、テキスト データの書き込みおよび読み取り操作によって、シリアル ポートの機器と通信する方法について説明します。

機器は、COM1 ポートに接続されている Tektronix TDS 210 2 チャネル オシロスコープです。そのため、次のコマンドの多くは、この機器に固有です。正弦波がオシロスコープのチャネル 2 への入力です。作業目的は、入力信号のピークツーピーク電圧を測定することです。

  1. シリアル ポート オブジェクトの作成 — シリアル ポート COM1 に関連するシリアル ポート オブジェクト s を作成します。

    s = serial('COM1');
  2. デバイスへの接続 — s をオシロスコープに接続します。ReadAsyncMode プロパティの既定値は continuous であるため、データは機器から読み取り可能になるとすぐに入力バッファーに非同期的に返されます。

    fopen(s)
  3. データの書き込みと読み取り — 関数 fprintf を使用して *IDN? コマンドを機器に書き込み、関数 fscanf を使用してコマンドの結果を読み取ります。

    fprintf(s,'*IDN?')
    idn = fscanf(s)
    idn =
    TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04

    測定のソースを決定する必要があります。使用可能な測定ソースには、オシロスコープのチャネル 1 およびチャネル 2 があります。

    fprintf(s,'MEASUREMENT:IMMED:SOURCE?')
    source = fscanf(s)
    source =
    CH1

    チャネル 1 からの測定結果を返す範囲が構成されます。入力信号はチャネル 2 に接続されるため、このチャネルからの測定結果を返す機器を構成しなければなりません。

    fprintf(s,'MEASUREMENT:IMMED:SOURCE CH2')
    fprintf(s,'MEASUREMENT:IMMED:SOURCE?')
    source = fscanf(s)
    source =
    CH2

    ピークツーピーク電圧を返す範囲を構成して、この測定結果の値を要求します。

    fprintf(s,'MEASUREMENT:MEAS1:TYPE PK2PK')
    fprintf(s,'MEASUREMENT:MEAS1:VALUE?')

    関数 fscanf を使用して入力バッファーから MATLAB にデータを送信します。

    ptop = fscanf(s,'%g')
    ptop =
    2.0199999809E0
  4. 切断とクリーンアップ — s が不要になったら、機器から切断し、メモリおよび MATLAB ワークスペースから削除します。

    fclose(s)
    delete(s)
    clear s

例 — textscan を使用した入力データの解析

次の例では、関数 textscan を使用してデバイスから読み取られるデータの解析と形式設定の方法について説明します。関数 textscan は、特に独自に指定された形式をもつ 1 つ以上の変数に文字列をパースする場合に役立ちます。

機器は、シリアル ポート COM1 に接続されている Tektronix TDS 210 2 チャネル オシロスコープです。

  1. シリアル ポート オブジェクトの作成 — シリアル ポート COM1 に関連するシリアル ポート オブジェクト s を作成します。

    s = serial('COM1');
  2. デバイスへの接続 — s をオシロスコープに接続します。ReadAsyncMode プロパティの既定値は continuous であるため、データは機器から読み取り可能になるとすぐに入力バッファーに非同期的に返されます。

    fopen(s)
  3. データの書き込みと読み取り — 関数 fprintf を使用して RS232? コマンドを機器に書き込み、関数 fscanf を使用してコマンドの結果を読み取ります。RS232? コマンドは、RS-232 設定をクエリし、ボー レート、ソフトウェア フロー制御設定、ハードウェア フロー制御設定、パリティ タイプおよび終端子を返します。

    fprintf(s,'RS232?')
    data = fscanf(s)
    data =
    9600;0;0;NONE;LF

    関数 textscan を使用して data 変数をパースし、5 つの新しい変数の形式にフォーマットします。

    C = textscan(a, '%d%d%d%s%s','delimiter',';'); 
    
    [br, sfc, hfc, par, tm] = deal(C{:});
    
    br =
            9600
    sfc =
         0
    hfc =
         0
    par = 
        'NONE'
    tm = 
        'LF'
  4. 切断とクリーンアップ — s が不要になったら、機器から切断し、メモリおよび MATLAB ワークスペースから削除します。

    fclose(s)
    delete(s)
    clear s

例 — バイナリ データの読み取り

この例では、TDS 210 オシロスコープ画面表示を MATLAB にダウンロードする方法を説明します。画面表示データは、Windows のビットマップ形式を使用してディスクに送信され、保存されます。このデータは、ユーザーの作業の永久的な記録で、重要な信号や範囲のパラメーターを記述するための簡単な方法です。

送信されるデータ量はかなり大きいと予想されるため、機器から利用が可能になるとすぐに入力バッファーに非同期的に返されます。これにより、送信が進行するにつれて他のタスクを実行できます。さらに、範囲は最大のボー レート 19200 に構成されます。

  1. シリアル ポート オブジェクトの作成 — シリアル ポート COM1 に関連するシリアル ポート オブジェクト s を作成します。

    s = serial('COM1');
  2. プロパティ値の構成 — 入力バッファーはかなり大きなバイト数を受け入れるように構成し、ボー レートは範囲によってサポートされる最大値に構成します。

    s.InputBufferSize = 50000;
    s.BaudRate = 19200;
  3. デバイスへの接続 — s をオシロスコープに接続します。ReadAsyncMode プロパティの既定値は continuous であるため、データは機器から読み取り可能になるとすぐに入力バッファーに非同期的に返されます。

    fopen(s)
  4. データの書き込みと読み取り — 画面表示をビットマップとして送信する範囲を構成します。

    fprintf(s,'HARDCOPY:PORT RS232')
    fprintf(s,'HARDCOPY:FORMAT BMP')
    fprintf(s,'HARDCOPY START')

    すべてのデータが入力バッファーに送信されるまで待ってから、データを符号なし 8 ビット整数として MATLAB ワークスペースに送信します。

    out = fread(s,s.BytesAvailable,'uint8');
  5. 切断とクリーンアップ — s が不要になったら、機器から切断し、メモリおよび MATLAB ワークスペースから削除します。

    fclose(s)
    delete(s)
    clear s

ビットマップ データの表示

ビットマップ データを表示するには、以下の手順に従います。

  1. ディスク ファイルを開きます。

  2. データをディスク ファイルに書き込みます。

  3. ディスク ファイルを閉じます。

  4. 関数 imread を使用してデータを MATLAB に読み取ります。

  5. 関数 imagesc を使用してデータをスケーリングして表示します。

関数 fopen、関数 fwrite および関数 fclose のファイル I/O バージョンが使用されていることに注意してください。

fid = fopen('test1.bmp','w');
fwrite(fid,out,'uint8');
fclose(fid)
a = imread('test1.bmp','bmp');
imagesc(a)

スコープは 2 色のみを使用して画面表示データを返すため、適切なカラーマップが選択されています。

mymap = [0 0 0; 1 1 1];
colormap(mymap)

次のダイアグラムは、結果のビットマップ イメージを示しています。