C#でファイルから読み込んだ画像をマップチップのように区切りたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
(’’

C#でファイルから読み込んだ画像をマップチップのように区切りたい

#1

投稿記事 by (’’ » 12年前

初めまして、C#でマップエディタを作ろうとしています。
マップチップを作るところで詰まってしまいました。
画像を読み込んでマップチップに区切りたいんですがうまくいきません。
その部分のソース↓

コード:

private void MainPanel_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.DrawImage(maptip[0], 32, 32, maptip[0].Width, maptip[0].Height);
            
        }
List<Image> maptip;
        private void Form1_Load(object sender, EventArgs e)
        {

            //マップチップの保存先List
            maptip = new List<Image>();
            //map.pngをbitmapに読み込む
            Bitmap a = new Bitmap(@"map.png");
            //作業用
            Image b;
            int tsize = 32; //タイルのサイズ
            for (int x = 0; x < 1; x++)
            {
                for (int y = 0; y < 1; y++)
                {
                    //bitmapのcloneでトリミング
                    b = a.Clone(new Rectangle(x*tsize,y*tsize,(x+1)*tsize,(y+1)*tsize),a.PixelFormat);
                    //マップチップに追加
                    maptip.Add(b);
                    //b.Dispose();
                }
            }
            a.Dispose();
        }
画像の読み込みまではうまく行ってるはずです。
実行すると、メモリが不足していますとエラーがでます。
forの所を x<1、y<1にするとメモリはいけるんですがパネルに表示されません。
どなたか、正しい方法を教えて下さい・・・

使ってる開発環境はVisual Studio Express 2013 for Windows Desctopです。
C#は始めたばかりです。C++とDXライブラリでゲームを作っていて、そのマップエディタを作ろうとしています。
C#でDXライブラリを使ってみようとはしたんですが、画面の出力先が一つのしか出来ないようだったので諦めました……

Idra

Re: C#でファイルから読み込んだ画像をマップチップのように区切りたい

#2

投稿記事 by Idra » 12年前

フォームはあまり詳しくないですが。
Rectangleのコンストラクターの引数が位置と大きさということは大丈夫ですか?
あとGraphics.DrawImageのオーバーロードで画像の一部を描画するメソッドもありますよ。

(’’

Re: C#でファイルから読み込んだ画像をマップチップのように区切りたい

#3

投稿記事 by (’’ » 12年前

はい、new Rectangle(…は・・・・・・ああ、なるほどここを間違えていましたorz
その上DrawImageは指定した範囲の描画もあるんですね。

Idraさん、ありがとうございます。しょうもないミスでした。
一応完成したのを貼っておきます。
ソース↓

コード:

        //マップチップ
        private Image[] maptip;
        //マップチップの最大数
        private int maptipMax;
        private void Form1_Load(object sender, EventArgs e)
        {

            //タイルの縦横サイズを指定
            int tsize = 32;
            //画像ファイルをbitmapに読み込む
            Bitmap a = new Bitmap(@"map.png");
            int tipW = a.Width / tsize, tipH = a.Height / tsize;
            maptipMax = tipW * tipH;
            Rectangle r = new Rectangle();//(作業用)
            maptip = new Image[maptipMax];
            for (int x = 0; x < tipW; x++)
            {
                for (int y = 0; y < tipH; y++)
                {
                    //bitmapをトリミングしてマップチップに追加
                    r.X = x * tsize; r.Y = y * tsize;
                    r.Width = r.Height = tsize;
                    maptip[x+y*tipW] = (Image)a.Clone(r,a.PixelFormat);
                }
            }
            //念のため解放
            a.Dispose();
        }

閉鎖

“C言語何でも質問掲示板” へ戻る