幾何学変換
Windowsアプリケーションでボタン一つで画像を45度回転させるプログラムを作りたいのですが、プログラムがよく分かりません。どなたか教えていただけないでしょうか。あと、回転変化後の画像には線形補間法(バイリニア法)を使っての補間処理をして表示させたいのですがよろしいでしょうか。言語はC#です。
自分で色々プログラム組んでるのですがなかなか出来ないです。今組んでるプログラムを実行すると変な風に実行されます。
組んでる途中のプログラム↓↓
private Color[,] SpinImage(Color[,] colImage)
{
int iHeight = colImage.GetLength(0);
int iWidth = colImage.GetLength(1);
//Console.WriteLine(iHeight + "\t" + iWidth);
double X = 45.0 * Math.PI / 180.0;
int iHeight2 = (int)(iWidth * Math.Cos(X) + iHeight * Math.Sin(X));
int iWidth2 = (int)(iWidth * Math.Sin(X) + iHeight * Math.Cos(X));
Color[,] colImage2 = new Color[iHeight2, iWidth2];
//Console.WriteLine(iHeight +"\t" +iWidth);
for (int j = 0; j < iHeight-1; j++)
{
for (int i = 0; i < iWidth-1; i++)
{
int m = (int)(i * Math.Cos(X) + j * Math.Sin(X));
int n = (int)(-1 * i * Math.Sin(X) + j * Math.Cos(X)) + 100;
int iRed = 0;
int iGreen = 0;
int iBlue = 0;
// Console.WriteLine("y:"+ j +"\t i:"+i+"\t m:" +m + "\tn:" + n);
iRed = colImage[j, i].R;
iGreen = colImage[j, i].G;
iBlue = colImage[j, i].B;
#region a
//if ((j >= 0) && (j < iWidth) && (i >= 0) && (i < iHeight))
//{
// iRed = colImage[i, j].R;
// iGreen = colImage[i, j].G;
// iBlue = colImage[i, j].B;
// colImage[m, n] = Color.FromArgb(iRed, iGreen, iBlue);
//}
//else
//{
// colImage[m, n] = Color.FromArgb(0, 0, 0);
//}
#endregion
if (m < iHeight && n >= 0)
{
colImage2[m, n] = Color.FromArgb(iRed, iGreen, iBlue);
}
}
}
return colImage2;
}
お礼
ありがとうございます。 探してみます。