protected virtual async Task <IEnumerable <byte> > ParsePngAsync(ISffPngReader sffPngReader, SffSpriteV2 sprite, ISpriteSubFileSffV2 subFile, int pngFormat) { var ctx = new SffPngReaderContext { PngFormat = pngFormat, RawImage = subFile.RawImage }; if (sprite.Palettes.Count() > subFile.PaletteIndex) { ctx.Palette = sprite.Palettes.ElementAt(subFile.PaletteIndex); } var image = await sffPngReader.ReadAsync(ctx); return(image); }
public async Task Should_Read_PNG(string pictureName) { const string directoryPath = "/Users/kdobrzynski/Dev/Negum.Core/Tests/Negum.Core.Tests/Readers/Png/Pics"; var path = Path.Combine(directoryPath, pictureName); NegumContainer.RegisterKnownTypes(); var rawBytes = await File.ReadAllBytesAsync(path); var reader = NegumContainer.Resolve <ISffPngReader>(); var context = new SffPngReaderContext { PngFormat = 8, RawImage = rawBytes }; var parsedImage = await reader.ReadAsync(context); Assert.NotNull(parsedImage); }
static void Main(string[] args) { // const string samplePngPath = "/Users/kdobrzynski/Downloads/control3-60x10-256-noI-noT-noD.png"; // const string samplePngPath = "/Users/kdobrzynski/Downloads/Rgb8.png"; const string samplePngPath = "/Users/kdobrzynski/Downloads/Rgba32.png"; NegumContainer.RegisterKnownTypes(); var rawBytes = File.ReadAllBytes(samplePngPath); var reader = NegumContainer.Resolve <ISffPngReader>(); var context = new SffPngReaderContext { PngFormat = 8, RawImage = rawBytes }; var imageBytes = reader.ReadAsync(context).Result; var parsedImageBytes = imageBytes.ToArray(); const int width = 374; const int height = 800; // SDL stuff SDL_Init(SDL_INIT_EVERYTHING); var windowPtr = SDL_CreateWindow( "PngReader Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1020, 800, SDL_WindowFlags.SDL_WINDOW_SHOWN | SDL_WindowFlags.SDL_WINDOW_OPENGL | SDL_WindowFlags.SDL_WINDOW_RESIZABLE); var rendererPtr = SDL_CreateRenderer(windowPtr, -1, SDL_RendererFlags.SDL_RENDERER_ACCELERATED); SDL_Event e; var quit = false; while (!quit) { // Handle events on queue while (SDL_PollEvent(out e) != 0) { switch (e.type) { case SDL_EventType.SDL_QUIT: quit = true; break; case SDL_EventType.SDL_KEYDOWN: break; } } // Clear screen SDL_SetRenderDrawColor(rendererPtr, 255, 255, 255, 255); SDL_RenderClear(rendererPtr); // Render textures / sprites to screen unsafe { fixed(void *p = &parsedImageBytes[0]) { var texturePtr = SDL_CreateTexture(rendererPtr, SDL_PIXELFORMAT_ABGR8888, (int)SDL_TextureAccess.SDL_TEXTUREACCESS_STATIC, width, height); // var rect = new SDL_Rect // { // w = width, // h = height, // x = 0, // y = 0 // }; SDL_SetRenderTarget(rendererPtr, texturePtr); SDL_UpdateTexture(texturePtr, IntPtr.Zero, new IntPtr(p), width * 4); // SDL_RenderCopy(rendererPtr, texturePtr, IntPtr.Zero, ref rect); SDL_RenderCopy(rendererPtr, texturePtr, IntPtr.Zero, IntPtr.Zero); } } // Update screen SDL_RenderPresent(rendererPtr); } SDL_DestroyRenderer(rendererPtr); SDL_DestroyWindow(windowPtr); SDL_Quit(); }