.NET Compact Frameworkは、.NET Frameworkからモバイル向けにいくつか機能を削除されています。
Graphics.DrawImage(Image, PointF[])が削除されており、線対称の反転処理や回転処理を自作する必要があります。
今回は、直接Bitmapオブジェクトの画像データにアクセスする処理をご紹介します。
まずは、buttonとpictureBoxコントロールを適当な位置に貼り付けます。
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
private void Draw(Image dstImage, string filePath)
{
// 表示したい画像を読み込む
Bitmap bmp = new Bitmap(filePath);
// 直接データを触る矩形を指定する
Rectangle lockRect = new Rectangle(0, 0, bmp.Width, bmp.Height);
// Bitmapをシステムメモリにロックする
BitmapData bmpData = bmp.LockBits(lockRect,
ImageLockMode.ReadWrite,
PixelFormat.Format32bppRgb);
// 画像データのコピー先の領域を確保する
int pixSize = 4;
int dataSize = bmp.Width * bmp.Height * pixSize;
byte[] data = new byte[dataSize];
// 元画像バッファから加工用バッファへコピーを行う。
Marshal.Copy(bmpData.Scan0, data, 0, data.Length);
// 読み出した画像の全ピクセルを黒にする
for (int i = 0; i < dataSize; i += pixSize)
{
// B
data[i] = 0;
// G
data[i + 1] = 0;
// R
data[i + 2] = 0;
// 未使用
//data[i + 3] = 0;
}
// 加工用バッファから元画像バッファへコピーを行う。
Marshal.Copy(data, 0, bmpData.Scan0, data.Length);
// システムメモリからBitmapのロックを解除する
bmp.UnlockBits(bmpData);
// Graphicsオブジェクトを利用して描画を行う
Graphics g = Graphics.FromImage(dstImage);
g.DrawImage(bmp, 0, 0);
}
呼び元で、
Draw(pictureBox1.Image, @"\My Documents\マイ ピクチャ\miku%20kirintamura.jpg");
と、任意のファイルパスを渡すと、下記の様な黒一色の画像がpictureBox1へ描画されます。
参考:
http://msdn.microsoft.com/ja-jp/library/5ey6h79d(VS.80).aspx