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ビット画像をファイルに出力 */
}
補足
回答ありがとうございます。紹介していただいた文献、確認してみます。今回教えていただいたのは数学的な手法かと思いますが、数式などを用いずに画像的に処理を工夫して角張らせる、といったことは可能でしょうか。よろしければ引き続き回答をお願いします。