Unable to create Thumbnail Image for AutoCAD
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi,
I am using below method for getting Bitmap object from autocad file.
This method is working fine for AutoCAD 2012 application
But same is not working in AutoCAD 2013 application
Please help me on this.
Regards,
Raman
publicBitmap GetAutoCADBitmap(string strFile, bool boolRetainBackColor)
{
Bitmap bmp = newBitmap(1, 1, PixelFormat.Format8bppIndexed);
byte bytCnt = 0;
byte[] bytBMPBuff = null;
int lngImgLoc = 0;
BinaryReader br = null;
int lngCurLoc = 0;
int lngY = 0;
int lngX = 0;
int lngColor = 0;
int lngCnt = 0;
short intCnt = 0;
IMGREC udtRec = default(IMGREC);
RGBQUAD[] udtColors = null;
RGBQUAD udtColor = default(RGBQUAD);
BITMAPINFOHEADER udtHeader = default(BITMAPINFOHEADER);
short intRed = 0;
short intGreen = 0;
short intBlue = 0;
if (File.Exists(strFile))
{
using (FileStream fs = newFileStream(strFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
br =
newBinaryReader(fs);
fs.Seek(13,
SeekOrigin.Begin);
lngImgLoc = br.ReadInt32();
fs.Seek(lngImgLoc + 17,
SeekOrigin.Begin);
lngCurLoc = lngImgLoc + 17;
fs.Seek(lngCurLoc + 3,
SeekOrigin.Begin);
bytCnt = br.ReadByte();
if (bytCnt > 1)
{
for (intCnt = 0; intCnt <= bytCnt - 1; intCnt++)
{
udtRec.bytType = br.ReadByte();
udtRec.lngStart = br.ReadInt32();
udtRec.lngLen = br.ReadInt32();
if (udtRec.bytType == 2)
{
fs.Seek(udtRec.lngStart,
SeekOrigin.Begin);
udtHeader.biSize = br.ReadInt32();
udtHeader.biWidth = br.ReadInt32();
udtHeader.biHeight = br.ReadInt32();
udtHeader.biPlanes = br.ReadInt16();
udtHeader.biBitCount = br.ReadInt16();
udtHeader.biCompression = br.ReadInt32();
udtHeader.biSizeImage = br.ReadInt32();
udtHeader.biXPelsPerMeter = br.ReadInt32();
udtHeader.biYPelsPerMeter = br.ReadInt32();
udtHeader.biClrUsed = br.ReadInt32();
udtHeader.biClrImportant = br.ReadInt32();
bytBMPBuff =
newbyte[udtRec.lngLen + 1];
if (udtHeader.biBitCount == 8)
{
udtColors =
newRGBQUAD[256];
for (int count = 0; count <= 255; count++)
{
udtColors[count].rgbBlue = br.ReadByte();
udtColors[count].rgbGreen = br.ReadByte();
udtColors[count].rgbRed = br.ReadByte();
udtColors[count].rgbReserved = br.ReadByte();
}
fs.Seek(udtRec.lngStart - 1,
SeekOrigin.Begin);
for (int count = 0; count <= udtRec.lngLen; count++)
{
bytBMPBuff[count] = br.ReadByte();
}
bmp =
newBitmap(udtHeader.biWidth, udtHeader.biHeight);
lngCnt = 0;
for (lngY = 1; lngY <= udtHeader.biHeight; lngY++)
{
for (lngX = udtHeader.biWidth; lngX >= 1; lngX += -1)
{
lngColor = bytBMPBuff[bytBMPBuff.GetUpperBound(0) - lngCnt];
udtColor = udtColors[lngColor];
intRed =
Convert.ToInt16(udtColor.rgbRed);
intGreen =
Convert.ToInt16(udtColor.rgbGreen);
intBlue =
Convert.ToInt16(udtColor.rgbBlue);
lngColor =
ColorTranslator.ToOle(Color.FromArgb(intRed, intGreen, intBlue));
if (boolRetainBackColor == false)
{
if (lngColor == ColorTranslator.ToOle(Color.Black))
{
lngColor =
ColorTranslator.ToOle(Color.White);
}
else
{
if (lngColor == ColorTranslator.ToOle(Color.White))
{
lngColor =
ColorTranslator.ToOle(Color.Black);
}
}
}
bmp.SetPixel(lngX - 1, lngY - 1,
ColorTranslator.FromOle(lngColor));
lngCnt += 1;
}
}
}
}
else
{
if (udtRec.bytType == 3)
returnnull;
}
}
}
else
returnnull;
}
}
return bmp;
}