コード例 #1
0
ファイル: DIB.cs プロジェクト: soopercool101/BrawlCrate
        public static DIB FromBitmap(Bitmap src, int wAlign, int hAlign, PixelFormat format)
        {
            DIB dib = new DIB(src.Width, src.Height, wAlign, hAlign, format);

            dib.ReadBitmap(src);
            return(dib);
        }
コード例 #2
0
        //internal override void EncodeLevel(TEX0v1* header, DIB dib, Bitmap src, int dStep, int sStep, int level)
        //{
        //    if ((level == 1) && (_blockBuffer != null))
        //    {
        //        CMPRBlock* sPtr = (CMPRBlock*)_blockBuffer.Address;
        //        CMPRBlock* dPtr = (CMPRBlock*)header->PixelData;
        //        int blocks = _blockBuffer.Length / 8;
        //        for (int i = 0; i < blocks; i++)
        //            dPtr[i] = sPtr[i];
        //    }
        //    else
        //        base.EncodeLevel(header, dib, src, dStep, sStep, level);
        //}
        internal override void EncodeLevel(VoidPtr addr, DIB dib, Bitmap src, int dStep, int sStep, int level)
        {
            if ((level == 1) && (_blockBuffer != null))
            {
                CMPRBlock* sPtr = (CMPRBlock*)_blockBuffer.Address;
                CMPRBlock* dPtr = (CMPRBlock*)addr;

                int blocks = _blockBuffer.Length / 8;
                for (int i = 0; i < blocks; i++)
                    dPtr[i] = sPtr[i];
            }
            else
                base.EncodeLevel(addr, dib, src, dStep, sStep, level);
        }
コード例 #3
0
 public static unsafe void CopyTo(this Bitmap bmp, Bitmap dest)
 {
     int w = Math.Min(bmp.Width, dest.Width);
     int h = Math.Min(bmp.Height, dest.Height);
     using (DIB dib = new DIB(w, h, dest.PixelFormat))
     {
         dib.ReadBitmap(bmp, w, h);
         dib.WriteBitmap(dest, w, h);
     }
 }
コード例 #4
0
 public static DIB FromBitmap(Bitmap src, PixelFormat format)
 {
     DIB dib = new DIB(src.Width, src.Height, format);
     dib.ReadBitmap(src);
     return dib;
 }
コード例 #5
0
        internal virtual void EncodeLevel(VoidPtr dstAddr, DIB dib, Bitmap src, int dStep, int sStep, int level)
        {
            int mw = dib.Width, mh = dib.Height, aw = mw.Align(BlockWidth);
            if (level != 1)
            {
                dstAddr += GetMipOffset(ref mw, ref mh, level);
                using (Bitmap mip = src.GenerateMip(level))
                    dib.ReadBitmap(mip, mw, mh);
            }

            mw = mw.Align(BlockWidth);
            mh = mh.Align(BlockHeight);

            int bStride = mw * BitsPerPixel / 8;
            for (int y = 0; y < mh; y += BlockHeight)
            {
                VoidPtr sPtr = (int)dib.Scan0 + (y * dib.Stride);
                VoidPtr dPtr = dstAddr + (y * bStride);
                for (int x = 0; x < mw; x += BlockWidth, dPtr += dStep, sPtr += sStep)
                    EncodeBlock((ARGBPixel*)sPtr, dPtr, aw);
            }
        }
コード例 #6
0
        public virtual Bitmap DecodeTexture(VoidPtr addr, int w, int h, int mipLevel)
        {
            addr += GetMipOffset(ref w, ref h, mipLevel);

            int aw = w.Align(BlockWidth), ah = h.Align(BlockHeight);

            using (DIB dib = new DIB(w, h, BlockWidth, BlockHeight, PixelFormat.Format32bppArgb))
            {
                int sStep = BlockWidth * BlockHeight * BitsPerPixel / 8;
                int bStride = aw * BitsPerPixel / 8;
                for (int y = 0; y < ah; y += BlockHeight)
                {
                    ARGBPixel* dPtr = (ARGBPixel*)dib.Scan0 + (y * aw);
                    VoidPtr sPtr = addr + (y * bStride);
                    for (int x = 0; x < aw; x += BlockWidth, dPtr += BlockWidth, sPtr += sStep)
                        DecodeBlock(sPtr, dPtr, aw);
                }
                return dib.ToBitmap();
            }
        }