예제 #1
0
파일: BitmapHelper.cs 프로젝트: sinshu/dtf
        /// <summary>
        /// 指定したファイルから画像を読み込み、その
        /// System.Drawing.Bitmap を返す。
        ///
        /// 画像の読み込み時には、System.FileSysを
        /// 利用するので、このファイルシステムにadd onされた
        /// アーカイバ等のなかのファイルであっても読める。
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        static public Bitmap LoadToBitmap(string filename)
        {
            try
            {
                // 実在するなら、そのまま読み込めば良い
                string realfile = FileSys.IsRealExist(filename);
                if (realfile != null)
                {
                    return(new Bitmap(realfile));
                }

                // memory stream経由で読み込むように修正

                byte[] data = FileSys.Read(filename);
                if (data == null)
                {
                    return(null);
                }

                using (MemoryStream stream = new MemoryStream(data))
                {
                    return(new Bitmap(stream));
                }
            }
            catch { }
            return(null);

            /*
             * Surface surface = new Surface();
             * if (surface.Load(filename) != YanesdkResult.NoError)
             *      return null;
             *
             * // Bitmap.FromHbitmap(surface.HBitmap);のほうがいいか?
             *
             * int w = surface.Width;
             * int h = surface.Height;
             *
             * Bitmap bitmap = new Bitmap(w,h);
             * BitmapData bmpdata;
             * if (surface.CheckRGB888())
             * {
             *      bmpdata = bitmap.LockBits(new Rectangle(0, 0, w, h),
             *              ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
             *
             *      // 画像コピー
             *      unsafe
             *      {
             *              // 最悪なのことにalignされている(´ω`)
             *
             *              byte* dst = (byte*)bmpdata.Scan0;
             *              int dst_pitch = bmpdata.Stride;
             *              byte* src = (byte*)surface.Pixels;
             *              int src_pitch = surface.Pitch;
             *
             *              for (int y = 0; y < h; ++y)
             *              {
             *                      for (int i = 0; i < w * 3; i += 3)
             *                      {
             *                              // しかもR,G,B逆かよ!(`ω´)
             *                              dst[i + 0] = src[i + 2];
             *                              dst[i + 1] = src[i + 1];
             *                              dst[i + 2] = src[i + 0];
             *                      }
             *                      src += src_pitch;
             *                      dst += dst_pitch;
             *              }
             *      }
             * }
             * else
             * {
             *      bmpdata = bitmap.LockBits(new Rectangle(0, 0, w, h),
             *              ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
             *
             *      // 画像コピー
             *      unsafe
             *      {
             *              // 最悪なのことにalignされている(´ω`)
             *
             *              byte* dst = (byte*)bmpdata.Scan0;
             *              int dst_pitch = bmpdata.Stride;
             *              byte* src = (byte*)surface.Pixels;
             *              int src_pitch = surface.Pitch;
             *
             *              for (int y = 0; y < h; ++y)
             *              {
             *                      for (int i = 0; i < w * 4; i += 4)
             *                      {
             *                              // しかもR,G,B逆かよ!(`ω´)
             *                              dst[i + 0] = src[i + 2];
             *                              dst[i + 1] = src[i + 1];
             *                              dst[i + 2] = src[i + 0];
             *                              dst[i + 3] = src[i + 3];
             *                      }
             *                      src += src_pitch;
             *                      dst += dst_pitch;
             *              }
             *      }
             * }
             *
             * bitmap.UnlockBits(bmpdata);
             *
             * return bitmap;
             */
        }