zzyong00 发表于 2016-3-11 13:54:43

的确是,以前高人辈出

bbswen 发表于 2018-7-1 15:38:33

标记下,dwg预览

ZKSJLL 发表于 2018-11-29 13:01:45

再来跟一个。好帖不能沉下去。

Leo1980 发表于 2019-9-5 11:17:34

谢谢楼主的资源,翻译成C#的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Drawing;

namespace Changfeng.AcadNetLib
{
    public class AcadUtility
    {
      public struct BITMAPFILEHEADER
      {
            public short bfType;
            public int bfSize;
            public short bfReserved1;
            public short bfReserved2;
            public int bfOffBits;
      }

      public static Image GetDwgImage(string FileName)
      {
            if (!File.Exists(FileName)) return default(Image);

            FileStream DwgF =null;
            BinaryReader br =null;

            //文件描述块的位置
            int PosSentinel = 0;

            //缩略图格式
            int TypePreview = 0;

            //缩略图位置
            int PosBMP = 0;

            //缩略图大小
            int LenBMP = 0;

            //缩略图比特深度
            short biBitCount = 0;

            //BMP文件头,DWG文件中不包含位图文件头,要自行加上去
            BITMAPFILEHEADER biH = new BITMAPFILEHEADER();
            byte[] BMPInfo = null; //包含在DWG文件中的BMP文件体
            MemoryStream BMPF = new MemoryStream(); //保存位图的内存文件流
            BinaryWriter bmpr = new BinaryWriter(BMPF); //写二进制文件类
            Image myImg = default(Image);
            try
            {
                DwgF = new FileStream(FileName, FileMode.Open, FileAccess.Read); //文件流
                br = new BinaryReader(DwgF);
                DwgF.Seek(13, SeekOrigin.Begin); //从第十三字节开始读取

                PosSentinel = br.ReadInt32(); //第13到17字节指示缩略图描述块的位置

                DwgF.Seek(PosSentinel + 30, SeekOrigin.Begin); //将指针移到缩略图描述块的第31字节

                TypePreview = br.ReadByte(); //第31字节为缩略图格式信息,2 为BMP格式,3为WMF格式
                switch (TypePreview)
                {
                  case 1:
                        break;

                  case 2:
                  case 3:
                        PosBMP = br.ReadInt32(); //DWG文件保存的位图所在位置
                        LenBMP = br.ReadInt32(); //位图的大小
                        DwgF.Seek(PosBMP + 14, SeekOrigin.Begin); //移动指针到位图块
                        biBitCount = br.ReadInt16(); //读取比特深度
                        DwgF.Seek(PosBMP, SeekOrigin.Begin); //从位图块开始处读取全部位图内容备用
                        BMPInfo = br.ReadBytes(LenBMP); //不包含文件头的位图信息
                        br.Close();
                        DwgF.Close();
                        biH.bfType = (short)(0x4D42);
                        if (biBitCount < 9)
                        {
                            biH.bfSize = System.Convert.ToInt32(54 + 4 * (Math.Pow(2, biBitCount)) + LenBMP);
                        }
                        else
                        {
                            biH.bfSize = 54 + LenBMP;
                        }
                        biH.bfReserved1 = (short)0; //保留字节
                        biH.bfReserved2 = (short)0; //保留字节
                        biH.bfOffBits = 14 + 0x28 + 1024; //图像数据偏移
                        //以下开始写入位图文件头
                        bmpr.Write(biH.bfType); //文件类型
                        bmpr.Write(biH.bfSize); //文件大小
                        bmpr.Write(biH.bfReserved1); //0
                        bmpr.Write(biH.bfReserved2); //0
                        bmpr.Write(biH.bfOffBits); //图像数据偏移
                        bmpr.Write(BMPInfo); //写入位图


                        BMPF.Seek(0, SeekOrigin.Begin); //指针移到文件开始处

                        myImg = (Image)(Image.FromStream(BMPF)); //创建位图文件对象
                        return myImg;
                  //      bmpr.Close();
                  //      BMPF.Close();

                  default:
                        break;
                }
            }
            catch (Exception)
            {
                return null;
            }


            return null;

      }



    }
}

qq1254582201 发表于 2019-10-14 16:39:34

感觉很厉害的样子,但是我就是不会用

20180426 发表于 2019-11-2 14:57:13

確實厲害,謝謝

christinary 发表于 2021-3-16 09:08:22

挺好的,非常感谢。

greatspark 发表于 2022-11-6 14:26:04

学习了~~~~~~~~~~

panyunkai 发表于 2023-3-18 10:08:36

这玩意怎么用:(

jornxl 发表于 2023-3-22 21:46:42

很有意义,选哟仔细拜读了
页: 1 2 3 4 5 [6] 7
查看完整版本: 转发 完美解决VB.NET窗体中预览DWG图形(附完整代码)