CH3COOH(酢酸)のさっぱり日記

最近は.NET1.1でVB.NETをして情熱を弄ぶ

目次

Blog 利用状況

ニュース

書庫

日記カテゴリ

[Windows Mobile]Tips:Bitmapオブジェクトの生データにアクセスする

.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へ描画されます。

Tips:Bitmapオブジェクトの生データにアクセスする_image01

参考:
http://msdn.microsoft.com/ja-jp/library/5ey6h79d(VS.80).aspx

投稿日時 : 2008年7月7日 20:11

コメントを追加

No comments posted yet.
タイトル  
名前  
URL
コメント