/// <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); }
/// <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); }