예제 #1
0
        protected override Document OnLoad(Stream input)
        {
            DdsFile ddsFile = new DdsFile();

            ddsFile.Load(input);

            BitmapLayer layer       = Layer.CreateBackgroundLayer(ddsFile.GetWidth(), ddsFile.GetHeight());
            Surface     surface     = layer.Surface;
            ColorBgra   writeColour = new ColorBgra();

            byte[] readPixelData = ddsFile.GetPixelData();

            for (int y = 0; y < ddsFile.GetHeight(); y++)
            {
                for (int x = 0; x < ddsFile.GetWidth(); x++)
                {
                    int readPixelOffset = (y * ddsFile.GetWidth() * 4) + (x * 4);

                    writeColour.R = readPixelData[readPixelOffset + 0];
                    writeColour.G = readPixelData[readPixelOffset + 1];
                    writeColour.B = readPixelData[readPixelOffset + 2];
                    writeColour.A = readPixelData[readPixelOffset + 3];

                    surface[x, y] = writeColour;
                }
            }

            // Create a document, add the surface layer to it, and return to caller.
            Document document = new Document(surface.Width, surface.Height);

            document.Layers.Add(layer);
            return(document);
        }
예제 #2
0
        protected override unsafe void OnSave(Document input, Stream output, SaveConfigToken token, Surface scratchSurface, ProgressEventHandler callback)
        {
            DdsSaveConfigToken ddsToken = ( DdsSaveConfigToken )token;

            // We need to be able to feast on the goo inside..
            scratchSurface.Clear(ColorBgra.Transparent);

            using (RenderArgs ra = new RenderArgs(scratchSurface))
            {
                input.Render(ra, true);
            }

            // Create the DDS file, and save it..
            DdsFile ddsFile = new DdsFile();

            ddsFile.Save(output, scratchSurface, ddsToken, callback);
        }