Octave画像ファイルの上下反転の方法

このQ&Aのポイント
  • Octaveのmファイルを使用して画像の上下を反転させる方法を教えてください。
  • 二重for文の内容を変えることで画像を上下逆さまに回転させることができます。
  • 初心者でも簡単に実行できる方法を教えてください。
回答を見る
  • ベストアンサー

Octave画像ファイルの向きを上下逆さまにしたい

% lec5_2.m % bmp画像出力(画像*****のプログラム) % % Input.bmp : 処理したい画像(モノクロ)BMPファイル % Output.bmp : 処理したい画像(モノクロ)BMPファイル clear all, close all % おまじない Iin=imread('LENNA.bmp'); % 画像の入力 figure, imshow(Iin) % 画像表示 [y_size,x_size]=size(Iin); %縦横のサイズ % 配布資料を参考にして以下の2重for文の % 中のプログラムを完成させよ for n=3:y_size for m=3:x_size n2=y_size-n+1; Iout(n,m)=Iin(n2,m); end end % プログラム修正ここまで figure, imshow(Iout) % 画像表示 bmpwrite_bk(Iout,'LENNA.bmp','Output.bmp'); % End of file 上記はOctaveのmファイルの中身ですが、これを使用すると画像の上下を反転させることができます。 これを、『画像を上下逆さまに回転』させ、元の画像を下向きにして表示させたいです。それをするには二重for文の内容を変えるみたいなのですが、どう変えればいいかわからず途方に暮れています。 二重for文の内容をどう変えたら成功するのでしょうか。 mファイルをどう弄ったらいいかもわからない初心者の質問です。よろしくお願いします。

  • TeraK
  • お礼率75% (65/86)

質問者が選んだベストアンサー

  • ベストアンサー
  • unacyo
  • ベストアンサー率51% (35/68)
回答No.1

180度回したいんですよね? まぁ、一行づつ何をやっているか解読してみれば、分かると思いますよ? 言語仕様が分からないので、間違ってたらご免なさいね。 n2=の行の下に追加  m2=x_size-n+1; 変更  Iout(n,m)=Iin(n2,m); → Iout(n,m) = Iin(n2,m2); まず、上下反転をは、n2を使って反転させているのが分かると思います。 ならば、同じ原理でXを計算してあげれば、左上は右下に、右下は左上にコピーされます。

TeraK
質問者

お礼

ありがとうございます!無事に解決できました。 こういうのを見ても、瞬時に分かるようにしたいです、努力します!

関連するQ&A

  • BMP画像を画像処理して連続に表示したいですが?

    プログラミングの初心者ですが、現在VC++2005のフォームアプリケーションでプログラムについて勉強しています。画像を連続表示するところで、わからなくなってしまったので、みなさんのご指導お願いいたします。 やりたい処理は、取り込んだ画像の色を変化させて、順番に表示したい 処理です。作成したプログラムは下記のようになります。 前略 for(n=0; n<256; n+=20){ for(y=0; y<480; y++){ for(x=0; y<640; x++){ bmp->Setpixel(x, y, Color::FromArgb(n, n, n)); } } pictureBox->Image = bmp; Thread::Sleep(2000); } nの値をbmpに入れてから一回表示し、さらにnを足してからbmpに入れて表示するといった流れですが、Sleepを入れても何にも表示されません。 どういったところは不具合なのかをよくわかりません。 ご指導をいただければ感謝致します。どうぞよろしくお願い致します。

  • ファイル読み取りについて

    MATLAB初心者です。 私なりにファイルの画像を読み取るループ文を作ってみたのですが動きません どこが悪いのか良ければ教えていただけますか? -------- プログラム ------------- FileFolder = fullfile(pwd,'画像ファイル名') ; Files = dir(fullfill(FileFolder,'*.bmp')) ; FileNames = {Files.name} ; for i= lenge(FileNames) : -1 : 1 f = fullfile(FileFolder,FileNames{i}) ; end よろしくお願いします。

  • 複数枚画像の合成

    こんにちわ、Visual Studio 2005のフォームアプリケーションでプログラミングしているものです。複数枚の画像を一つの画像にしたいのですが、どうもあっているのかどうかわかりません。 たとえば、画像が9枚あって1枚目の一番左上の画素を[0-0,0]とすると、 [0-0,0][1-0,0][2-0,0]|[3-1,0][4-1,0][5-1,0]|[6-2,0][7-2,0][8-2,0] [0-0,0][1-0,0][2-0,0]|[3-1,0][4-1,0][5-1,0]|[6-2,0][7-2,0][8-2,0] [3-0,0][4-0,0][5-0,0]|[6-1,0][7-1,0][8-1,0]|[0-2,0][1-2,0][2-2,0] [3-0,0][4-0,0][5-0,0]|[6-1,0][7-1,0][8-1,0]|[0-2,0][1-2,0][2-2,0] [6-0,0][7-0,0][8-0,0]|[0-1,0][1-1,0][2-1,0]|[3-2,0][4-2,0][5-2,0] [6-0,0][7-0,0][8-0,0]|[0-1,0][1-1,0][2-1,0]|[3-2,0][4-2,0][5-2,0] -----------------+-----------------+------------------------ [0-0,1][1-0,1][2-0,1]|[3-1,1][4-1,1][5-1,1]|[6-2,1][7-2,1][8-2,1] [0-0,1][1-0,1][2-0,1]|[3-1,1][4-1,1][5-1,1]|[6-2,1][7-2,1][8-2,1] [3-0,1][4-0,1][5-0,1]|[6-1,1][7-1,1][8-1,1]|[0-2,1][1-2,1][2-2,1] [3-0,1][4-0,1][5-0,1]|[6-1,1][7-1,1][8-1,1]|[0-2,1][1-2,1][2-2,1] [6-0,1][7-0,1][8-0,1]|[0-1,1][1-1,1][2-1,1]|[3-2,1][4-2,1][5-2,1] [6-0,1][7-0,1][8-0,1]|[0-1,1][1-1,1][2-1,1]|[3-2,1][4-2,1][5-2,1] -----------------+-----------------+------------------------ [0-0,2][1-0,2][2-0,2]|[3-1,2][4-1,2][5-1,2]|[6-2,2][7-2,2][8-2,2] [0-0,2][1-0,2][2-0,2]|[3-1,2][4-1,2][5-1,2]|[6-2,2][7-2,2][8-2,2] [3-0,2][4-0,2][5-0,2]|[6-1,2][7-1,2][8-1,2]|[0-2,2][1-2,2][2-2,2] [3-0,2][4-0,2][5-0,2]|[6-1,2][7-1,2][8-1,2]|[0-2,2][1-2,2][2-2,2] [6-0,2][7-0,2][8-0,2]|[0-1,2][1-1,2][2-1,2]|[3-2,2][4-2,2][5-2,2] [6-0,2][7-0,2][8-0,2]|[0-1,2][1-1,2][2-1,2]|[3-2,2][4-2,2][5-2,2] といった感じにしようと思っています。 画像には配列を使っていてbmp[0]~[8]が9枚の画像を表し、picはbmp[0]~[8]の画像一枚に対してサイズが横3倍縦6倍の画像になるはずです。 自分でプログラムしたのですが、できた画像を拡大しても細かすぎてよくわからない状況です。 for ( y = 0; y < h; y += 6 ) {  for ( x = 0; x < w; x += 3 ) {   for( b = 0; b < 3; b++ ) {    for( a = 0; a < 3; a++ ) {      pic->SetPixel( x + a, y + (2 * b) , bmp[((2 * b) * 3 + a + x) % 9]->GetPixel( x / 3, y / 6 ) );      pic->SetPixel( x + a, y + (2 * b) , bmp[(((2 * b) + 1) * 3 + a + x) % 9]->GetPixel( x / 3, y / 6 ) );    }   }  } } 以前に、同じような配置法なのですが横3倍縦3倍の合成画像として、 [0-0,0][1-0,0][2-0,0]|[3-1,0][4-1,0][5-1,0]|[6-2,0][7-2,0][8-2,0] [3-0,0][4-0,0][5-0,0]|[6-1,0][7-1,0][8-1,0]|[0-2,0][1-2,0][2-2,0] [6-0,0][7-0,0][8-0,0]|[0-1,0][1-1,0][2-1,0]|[3-2,0][4-2,0][5-2,0] -----------------+-----------------+------------------------ [0-0,1][1-0,1][2-0,1]|[3-1,1][4-1,1][5-1,1]|[6-2,1][7-2,1][8-2,1] [3-0,1][4-0,1][5-0,1]|[6-1,1][7-1,1][8-1,1]|[0-2,1][1-2,1][2-2,1] [6-0,1][7-0,1][8-0,1]|[0-1,1][1-1,1][2-1,1]|[3-2,1][4-2,1][5-2,1] -----------------+-----------------+------------------------ [0-0,2][1-0,2][2-0,2]|[3-1,2][4-1,2][5-1,2]|[6-2,2][7-2,2][8-2,2] [3-0,2][4-0,2][5-0,2]|[6-1,2][7-1,2][8-1,2]|[0-2,2][1-2,2][2-2,2] [6-0,2][7-0,2][8-0,2]|[0-1,2][1-1,2][2-1,2]|[3-2,2][4-2,2][5-2,2] の配置プログラムとして、 for ( y = 0; y < h; y += 3 ) {  for ( x = 0; x < w; x += 3 ) {   for( b = 0; b < 3; b++ ) {    for( a = 0; a < 3; a++ ) {      pic->SetPixel( x + a, y + b , bmp[(b * 3 + a + x) % 9]->GetPixel( x / 3, y / 3 ) );    }   }  } } との回答をいただいたので、これを参考に作ってみたのですが・・・。 説明が下手でわかりにくいかもしれませんが、お分かりの方がいましたらご教授お願いします。

  • C++ Builderにおける画像データの取得について

    C++での画像処理プログラムの研究をしている者です。 文字数制限がありますので簡潔になりますがよろしくお願いします。 担当教官から基本となるプログラムをいただいたのですが実行するとエラーが出てしまいます。 プログラム内容: void TImg::ImgMemToBmp(Graphics::TBitmap *bmp, BYTE *img) { GetBmpHdr(); // ビットマップヘッダー取得 String fileName = StartDir + "\\tmp.bmp"; FILE *fp;if (NULL == (fp = fopen(fileName.c_str(), "wb"))) return; fwrite(BmpHeader, 54, 1, fp); // ヘッダー //******** 画像書き込み ******** BYTE *p, *img1 = (BYTE *)malloc(Pixel_X_Max*3); for (int y=0; y<Pixel_Y_Max; y++) { p = img + (Pixel_Y_Max-y-1) * Pixel_X_Max; for (int x=0; x<Pixel_X_Max; x++) { *(img1+3*x) = *(img1+3*x+1) = *(img1+3*x+2) = *(p+x); } fwrite(img1, Pixel_X_Max*3, 1, fp); } fclose(fp); bmp->LoadFromFile(fileName); // BMPファイル読み込み DeleteFile(fileName); free(img1); // 不要ファイル、メモリ削除 } 問題点:下から3行目の bmp->LoadFromFile(fileName); でクラスの例外が発生しました。"ビットマップが不正です"とのエラーが出ます。 私なりにプログラムを解析してみたところ で、tmp.bmpというファイルを作りそこに白黒画素値を書き込んでいるように思うのですが 途中で止めてtmp.bmpのサイズを確認してみたところ 原画像が640×480の画像でtmp.bmpのサイズは20971840×15728640となっていました。 これが原因でエラーと出たのではないかと考えたのですがいかがでしょうか? 補足要求していただければ、適宜補足いたしますので どうかご助力をよろしくお願いいたします。

  • 線形補間法プログラム(C++)

    C++言語で線形補間法のプログラムを組んで実行しているのですが、どしてもうまくいきません。ただ2倍の画像を作っているだけなのですが・・・。 以下プログラムを載せます、おおよその場所はわかるのですがどうすれば通るのかわかりません。どう直したらよいのか分かる方がいましたらご教授お願いします。 ※bmp[0]:現画像 pic:bmp[0]の縦横2倍の画像 // 線形補間法 // int zx = 2; int zy = 2; int i,j,m,n; float x,y,p,q; int xs = bmp[0]->Width/2; int ys = bmp[0]->Height/2; int d; for(i = -ys; i < ys; i++){ for(j = -xs; j < xs; j++){ y = i/zy; x = j/zx; if(y > 0){ m = (int)y; }else{ m = (int)(y-1);} if(x > 0){ n = (int)x; }else{ n = (int)(x-1);} q = y - m; p = x - n; if(q == 1){q = 0; m = m + 1;} if(p == 1){p = 0; n = n + 1;} if((m >= -ys)&&(m < ys)&&(n >= -xs)&&(n < xs)){ d = (int)((1.0 - q) * (1.0 - p) * (bmp[0]->GetPixel( m + ys, n + xs)) //おそらくこの辺に問題があるかと思われます。 + p * (bmp[0]->GetPixel( m +ys, n + xs)) + q * (1.0 - p) * (bmp[0]->GetPixel(m + 1 + ys, n + xs)) + p * (bmp[0]->GetPixel(m + 1 + ys, n + 1 + xs))); }else{ d = 0; } if(d < 0){d = 0;} if(d > 255){d = 255;} pic->SetPixel(i + ys, j + xs) = d; } } pictureBox2->Image = pic; }

  • VBAで画像処理

    以下のプログラムは、C言語で記載されたプラグラムで、画像に鏡映変換を施すプログラムです。 これを、ExcelVBAでやりたいとおもうのですが、 特に、一度Excelのセルに読みだして、そこで数字を処理してトしたいと考えています。 (単に画像Excelの機能だけをつかってを反転するだけならば、たいしたことではないので 自分で判るのですが、一度配列なりセルに画素情報を読み込む方法は、見当もつかないので 知りたいと思っています。) ということで、特に以下の(1)、(2)に注意して、ExcelVBAで下記のプログラムを変換する方法を教えてください。よろしくお願いします。 (1)特に、以下の部分の記述がどう変化するか、教えてください。 void main(void) { char input[100], output[100]; printf("入力画像ファイル名(input.bmp):"); scanf("%s", input); printf("出力画像ファイル名(output.bmp):"); scanf("%s", output); /* 画像の入力 */ readBmp(input, image_in); /* RGB24ビットカラーBMP画像を配列に格納 */ /* 画像処理 */ mirror(image_in, image_out); /* 鏡像を作る */ /* 画像の出力 */ writeBmp(image_out, output); /* RGB24ビット画像をファイルに出力 */ } (2)特に、一度BMPの画素情報を、Excelのセルに読み込めるようにしていただけると助かります。 ========= #include <stdio.h> #include <stdlib.h> /* 最大画像サイズ */ #define Y_SIZE 1280 #define X_SIZE 1280 /* BMPファイル用 */ typedef short INT2; typedef long INT4; INT2 bfType; INT4 bfSize; INT2 bfReserved1, bfReserved2; INT4 bfOffBits; INT4 biSize, biWidth, biHeight; INT2 biPlanes, biBitCount; INT4 biCompression, biSizeImage, biXPelsPerMeter, biYPelsPerMeter, biClrUsed, biClrImportant; #define HIGH 255 /* 2値画像の白 */ #define LOW 0 /* 2値画像の黒 */ #define LEVEL 256 /* 濃度レベル数 */ unsigned char image_in[Y_SIZE][X_SIZE][3]; /* 入力カラー画像配列 */ unsigned char image_out[Y_SIZE][X_SIZE][3]; /* 出力カラー画像配列 */ /* 鏡像を作る(左右逆) */ void mirror( unsigned char in[Y_SIZE][X_SIZE][3], unsigned char out[Y_SIZE][X_SIZE][3]) { int i,j,k; for (i=0; i<biHeight; i++) for (j=0; j<biWidth; j++) for (k=0; k<3; k++) out[i][j][k] = in[i][biWidth-1-j][k]; } void main(void) { char input[100], output[100]; printf("入力画像ファイル名(input.bmp):"); scanf("%s", input); printf("出力画像ファイル名(output.bmp):"); scanf("%s", output); /* 画像の入力 */ readBmp(input, image_in); /* RGB24ビットカラーBMP画像を配列に格納 */ /* 画像処理 */ mirror(image_in, image_out); /* 鏡像を作る */ /* 画像の出力 */ writeBmp(image_out, output); /* RGB24ビット画像をファイルに出力 */ }

  • 画像のファイル形式とファイルサイズの関係について

    画像のファイル形式とファイルサイズの関係について デジカメから取り出した直後の画像(jpg形式)を、そのままbmp形式で保存しなおすとファイルサイズがグーンと上がります。 jpg形式での保存は高圧縮されるというのは理解できるのですが、もともと、たとえば1MBだった画像を開いて何も手を加えずにbmp形式で保存しなおすと10数MBにファイルサイズが跳ね上がるのはどうしてなんでしょうか。 お友達に聞かれて回答できず困っています。よろしくお願いします。

  • BMPファイルへの書き込みができない

    このプログラムは、左半分を黒、右半分を白の画像をBMPファイルに出力しようとしています。(出来ていません) プログラムの下に質問書いてます!お願いします! #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct{ char *filename; int x; int y; int width; int height; unsigned char data[80][100]; } BMP_DATA; static void WriteBmp(char *filename, BMP_DATA Image) { unsigned long Bmp_size;/*BMPファイルのサイズ*/ unsigned int Bmp_info_header_size;/*情報ヘッダのサイズ*/ unsigned int Bmp_header_size;/*ヘッダのサイズ*/ long Bmp_width;/*幅*/ long Bmp_height;/*高さ*/ unsigned short Bmp_planes;/*プレーン数*/ unsigned short Bmp_color;/*色 = 1[bit] (黒か白かだけ)*/ long Bmp_image_size;/*画像部分のサイズ*/ long Bmp_xppm;/*水平解像度*/ long Bmp_yppm;/*垂直解像度*/ int i,j; unsigned char Bmp_headbuf[54]; /*ヘッダ*/ unsigned char Bmp_Data[13]; FILE *Out = fopen(filename, "wb"); if(Out==NULL){ fclose(Out); exit(1); } /* ヘッダ情報の準備 */ Bmp_info_header_size = 40; Bmp_header_size = 54; Bmp_planes = 1; Bmp_color = 1; Bmp_image_size = Image.height * Image.width; Bmp_xppm = 0; Bmp_yppm = 0; Bmp_size = Bmp_image_size + Bmp_header_size; Bmp_headbuf[0] = 'B'; Bmp_headbuf[1] = 'M'; memcpy(Bmp_headbuf+2, &Bmp_size, sizeof(Bmp_size)); Bmp_headbuf[6] = 0; Bmp_headbuf[7] = 0; Bmp_headbuf[8] = 0; Bmp_headbuf[9] = 0; memcpy(Bmp_headbuf+10, &Bmp_header_size, sizeof(Bmp_header_size)); Bmp_headbuf[11] = 0; Bmp_headbuf[12] = 0; Bmp_headbuf[13] = 0; memcpy(Bmp_headbuf+14, &Bmp_info_header_size, sizeof(Bmp_info_header_size)); Bmp_headbuf[15] = 0; Bmp_headbuf[16] = 0; Bmp_headbuf[17] = 0; memcpy(Bmp_headbuf+18, &Image.width, sizeof(Bmp_width)); memcpy(Bmp_headbuf+22, &Image.height, sizeof(Bmp_height)); memcpy(Bmp_headbuf+26, &Bmp_planes, sizeof(Bmp_planes)); memcpy(Bmp_headbuf+28, &Bmp_color, sizeof(Bmp_color)); memcpy(Bmp_headbuf+34, &Bmp_image_size, sizeof(Bmp_image_size)); memcpy(Bmp_headbuf+38, &Bmp_xppm, sizeof(Bmp_xppm)); memcpy(Bmp_headbuf+42, &Bmp_yppm, sizeof(Bmp_yppm)); Bmp_headbuf[46] = 0; Bmp_headbuf[47] = 0; Bmp_headbuf[48] = 0; Bmp_headbuf[49] = 0; Bmp_headbuf[50] = 0; Bmp_headbuf[51] = 0; Bmp_headbuf[52] = 0; Bmp_headbuf[53] = 0; /* ヘッダ情報書き出し */ fwrite(Bmp_headbuf, sizeof(unsigned char), Bmp_header_size, Out); /* 画像データ書き出し */ for(i=0;i<13;i++) Bmp_Data[i] = 0; for(i=0; i<Image.height; i++){ for(j=0; j<Image.width; j++){ int index = j/8; if(j%8 == 0){ Bmp_Data[index] = Image.data[i][j ] * 128 + Image.data[i][j+1] * 64 + Image.data[i][j+2] * 32 + Image.data[i][j+3] * 16 + Image.data[i][j+4] * 8 + Image.data[i][j+5] * 4 + Image.data[i][j+6] * 2 + Image.data[i][j+7]; } } Bmp_Data[12] = (Bmp_Data[12] & 0xf0); fwrite(Bmp_Data, sizeof(unsigned char), 20, Out); /* ○ */ } fclose(Out); } int main() { BMP_DATA Image; int line = 0; int i,j; Image.x = 0; Image.y = 0; Image.width = 100; Image.height = 80; if(line == 0){ for(i=0; i<Image.height; i++){ for(j=0; j<Image.width; j++){ Image.data[i][j] = 1; } } } while(1){ /* BMPファイルデータを編集 */ for(j=0; j<Image.width; j++){ if(j < 50){ Image.data[line][j] = 0;//black }else{ Image.data[line][j] = 1;//white } } /* すべての列を編集したら、再描画する */ if(line == 63){ /* BMPファイルに書込む */ WriteBmp("display.bmp", Image); break; } line++; } return 0; } 以下の条件で、BMPファイルへ書き込もうとしています ・色の深さ1(黒か白) ・画像のピクセルサイズ(横100×縦80) fwrite関数で1列ずつ書き込もうとしているのですが、 この関数は1バイトずつしか書き込めないみたいで、100ビット書き込もうと思うと、 最低でも104ビット書き込まなくてはならない状況になります。 まず、この4ビットはどう処理すればいいのでしょうか?? あと、display.bmpのファイルがある状態で、プログラムを実行するとちゃんと動くのですが、 プログラム中の○のところのfwrite関数の第三引数を13にすると、BMPファイルが壊れて閲覧できなくなります。(ある程度大きい数字だと、BMPファイルは壊れないのですが、ぐちゃぐちゃの絵になります) その理由もわかりません。 汚い文章&プログラムですが よろしくお願いします><

  • Octaveで画像が読めなくて困ってます。

    はじめまして! 家で夏休みの課題でMATLABの演習をやってるいるのですが、 MATLABは学校でしか使えません。だから、無料配布のOctaveを使っています。 いま、Octaveで二次元FIRフィルタで画像を処理したいのですが、imread('ファイル名')で画像が読み込めません。エラーのメッセージはこんな感じです。 error: could not read file: C:/PROGRA~1/GNUOCT~1.36/tmp/oct-610bfb74.0 error: evaluating if command near line 178, column 4 error: called from `imread' in file `/usr/share/octave/2.1.36/m/image/imread.m' error: near line 2 of file `/octave_files/octave13_3.m 処理したい画像ファイルはoctave_filesに入れてやっていいるのですが、 違うところに入れないといけないのか。 あるいはたんにプログラムに問題ありなのか。 わかる方がいればよろしくお願いします。

  • C言語でbmp モノクロ画像の画像処理を行い、x・y・1or0 をtx

    C言語でbmp モノクロ画像の画像処理を行い、x・y・1or0 をtxtファイルに出力するプログラムを作らないといけないのですが、下記のプログラムのどこをいじればいいかわかりませんだれかお分かりになりませんか? #include <stdio.h> #include <process.h> #define COEF 0.1; #define X_CHORD_Max 512 #define Y_CHORD_Max 512 unsigned long *readBmp(char *filename); main() { unsigned long *pBmp; char input[64], output[64]; int x, y, k,n; char temp; float xCodnt,yCodnt; unsigned long hight, wight; unsigned int maskBit = 0x0080; /* Record the data*/ printf("Input file.bmp :"); scanf("%s", input); printf("output file.txt :"); scanf("%s", output); FILE *fpTxt; if((fpTxt=fopen(output,"wt"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } pBmp = readBmp(input); /* Read the Data*/ hight = *(pBmp+1); wight = *pBmp/32; pBmp += 2; for (y=0;y<hight; y++) { for (x=0; x<wight; x++) { for (k=0; k<4; k++) { temp =(char)*pBmp; for (n=0; n<8; n++) { if(temp & maskBit) { xCodnt = COEF; yCodnt =COEF; xCodnt = xCodnt*(x*32+k*8+n); yCodnt = yCodnt*y; fprintf(fpTxt,"G01 X%f Y%f\n",xCodnt,yCodnt); } maskBit >>= 1; } *pBmp >>= 8; maskBit = 0x0080; } pBmp ++; } } rewind(fpTxt); fclose(fpTxt); //END