我正在尝试通过复制图像然后将它们粘贴为手动方式,以编程方式将光栅图像嵌入到 dwg 文件中。这里的问题是质量太差了,因为我是直接复制图像,而不是在“画图”中编辑图像,然后从那里复制图像。所以我现在需要的是一种复制图像的方法,因为它是从画图复制的,而无需打开画图或通过进行一些图像处理或使用任何免费的开源库来使用它。 有什么想法吗?
我的回复来自这里。
public static void AttachRasterImage(Database db, string fileName, Point3d position, double scale)
{
string imageName = SymbolUtilityServices.GetBlockNameFromInsertPathName(fileName);
using (var tr = db.TransactionManager.StartTransaction())
{
var imageDictId = RasterImageDef.GetImageDictionary(db);
if (imageDictId.IsNull)
{
imageDictId = RasterImageDef.CreateImageDictionary(db);
}
var imageDict = (DBDictionary)tr.GetObject(imageDictId, OpenMode.ForRead);
ObjectId imageDefId;
RasterImageDef imageDef;
if (imageDict.Contains(imageName))
{
imageDefId = imageDict.GetAt(imageName);
imageDef = (RasterImageDef)tr.GetObject(imageDefId, OpenMode.ForRead);
}
else
{
imageDef = new RasterImageDef() { SourceFileName = fileName };
imageDef.Load();
tr.GetObject(imageDictId, OpenMode.ForWrite);
imageDefId = imageDict.SetAt(imageName, imageDef);
tr.AddNewlyCreatedDBObject(imageDef, true);
}
var image = new RasterImage();
image.ImageDefId = imageDefId;
image.Orientation = new CoordinateSystem3d(
position,
new Vector3d(imageDef.ResolutionMMPerPixel.X * image.Width * scale, 0.0, 0.0),
new Vector3d(0.0, imageDef.ResolutionMMPerPixel.Y * image.Height * scale, 0.0)); ;
var curSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
curSpace.AppendEntity(image);
tr.AddNewlyCreatedDBObject(image, true);
RasterImage.EnableReactors(true);
image.AssociateRasterDef(imageDef);
tr.Commit();
}