public static void ImgLoadImage(string filepathname, int flipVertical, out demoImage image) { UIImage imageClass = new UIImage(filepathname); CGImage cgImage = imageClass.CGImage; if (cgImage == null) { image = null; return; } image = new demoImage(); image.width = imageClass.Size.Width; image.height = imageClass.Size.Height; image.rowByteSize = (int)image.width * 4; image.data = new byte[(int)(image.height * image.rowByteSize)]; image.format = PixelFormat.Rgba; image.type = PixelType.UnsignedByte; CGContext context = new CGBitmapContext(image.data, (nint)image.width, (nint)image.height, 8, image.rowByteSize, cgImage.ColorSpace, (CGImageAlphaInfo)(CGBitmapFlags.AlphaInfoMask & CGBitmapFlags.NoneSkipLast)); context.SetBlendMode(CGBlendMode.Copy); if (flipVertical != 0) { context.TranslateCTM(0f, image.height); context.ScaleCTM(1f, -1f); } context.DrawImage(new CGRect(0, 0, image.width, image.height), cgImage); if (image.data == null) { ImgDestroyImage(ref image); } }
internal static int BuildTexture(demoImage image) { int texName = 0; // Create a texture object to apply to model unsafe { GL.GenTextures(1, &texName); GL.BindTexture(TextureTarget.Texture2D, texName); // Set up filter and wrap modes for this texture object GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (float)All.Nearest); // Allocate and load image data into texture GL.TexImage2D(TextureTarget.Texture2D, 0, (PixelInternalFormat)image.format, (int)image.width, (int)image.height, 0, image.format, image.type, Marshal.UnsafeAddrOfPinnedArrayElement(image.data, 0)); RenderUtils.CheckGLError(); } return(texName); }
public static void ImgDestroyImage(ref demoImage image) { image = null; }