示例#1
0
        /// <summary>
        /// Load texture from the image.
        /// </summary>
        /// <param name="imagePath">path of image</param>
        /// <param name="isRepeat">whether repeat the image or not</param>
        /// <returns>texture Id</returns>
        private int LoadTexture(string imagePath, bool isRepeat)
        {
            int     textureId;
            MBitmap bitm = MImageUtil.LoadImage(imagePath);

            byte[] pixels = bitm.byteBuffer;
            GL.PixelStore(PixelStoreParameter.UnpackAlignment, 4);
            unsafe
            {
                int *teid = &textureId;
                GL.GenTextures(1, teid);
                GL.BindTexture(TextureTarget.Texture2D, textureId);
                GL.TexImage2D(TextureTarget2d.Texture2D, 0, TextureComponentCount.Rgb, (int)bitm.inforHeader.biWidth, (int)bitm.inforHeader.biHeight, 0, PixelFormat.Rgb, PixelType.UnsignedByte, pixels);
            }

            if (isRepeat)
            {
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (float)All.Repeat);
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (float)All.ClampToEdge);
            }

            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (float)All.LinearMipmapLinear);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (float)All.Linear);
            GL.GenerateMipmap(TextureTarget.Texture2D);
            return(textureId);
        }
示例#2
0
        /// <summary>
        /// Load bmp information from the image.
        /// </summary>
        /// <param name="path">path of image</param>
        /// <returns>Image information per pixel</returns>
        public static MBitmap LoadImage(string path)
        {
            MBitmap bitmap = new MBitmap();

            // Read bitmap image from path.
            Stream       imageStream = File.OpenRead(path);
            BinaryReader reader      = new BinaryReader(imageStream);

            // Parse the bitmap information
            bitmap.header.bfType      = reader.ReadUInt16();
            bitmap.header.bfSize      = reader.ReadUInt32();
            bitmap.header.bfReserved1 = reader.ReadUInt16();
            bitmap.header.bfReserved2 = reader.ReadUInt16();
            bitmap.header.bfOffBytes  = reader.ReadUInt32();

            bitmap.inforHeader.biSize          = reader.ReadUInt32();
            bitmap.inforHeader.biWidth         = reader.ReadUInt32();
            bitmap.inforHeader.biHeight        = reader.ReadUInt32();
            bitmap.inforHeader.biPlanes        = reader.ReadUInt16();
            bitmap.inforHeader.biBitCount      = reader.ReadUInt16();
            bitmap.inforHeader.biCompression   = reader.ReadUInt32();
            bitmap.inforHeader.biSizeImage     = reader.ReadUInt32();
            bitmap.inforHeader.biXPelsPerMeter = reader.ReadUInt32();
            bitmap.inforHeader.biYPelsPerMeter = reader.ReadUInt32();
            bitmap.inforHeader.biClrUsed       = reader.ReadUInt32();
            bitmap.inforHeader.biClrImportant  = reader.ReadUInt32();
            byte[] temp = reader.ReadBytes((int)reader.BaseStream.Length);
            bitmap.byteBuffer = new byte[temp.Length];
            for (int i = 2; i < temp.Length; i += 3)
            {
                bitmap.byteBuffer[i - 2] = temp[i];
                bitmap.byteBuffer[i - 1] = temp[i - 1];
                bitmap.byteBuffer[i]     = temp[i - 2];
            }

            return(bitmap);
        }