Small code fragment(s) to show you how to search for the Embedded Images

CommandMethod("TestEmbedded")]
public static void TestEmbedded()
{
Document doc = null;
Editor ed = null;
Database db = null;
try
{
doc = AcadApp.DocumentManager.MdiActiveDocument;
ed = doc.Editor;
db = doc.Database;
var imageDictId = RasterImageDef.GetImageDictionary(db);
if (imageDictId.IsNull)
{
ed.WriteMessage("No Images in this Drawing\n");
imageDictId = RasterImageDef.CreateImageDictionary(db);
}
var imageDefId = ObjectId.Null;
using (var tr = db.TransactionManager.StartTransaction())
{
var imageDict = (DBDictionary)tr.GetObject(imageDictId, OpenMode.ForRead);
foreach (DBDictionaryEntry imageEntry in imageDict)
{
ed.WriteMessage($"{imageEntry.Key}:\n");
imageDefId = imageEntry.Value;
var rasterDef = tr.GetObject(imageDefId, OpenMode.ForWrite) as RasterImageDef;
ed.WriteMessage($"\t Size={rasterDef.Size[0]} X {rasterDef.Size[1]}\n");
if (rasterDef.IsEmbedded)
{
ed.WriteMessage($"\t Embedded Image, no External Pathnames\n");
}
else //Not Embedded Image
{
ed.WriteMessage($"\t {rasterDef.ActiveFileName}\n");
//Obsolete: ed.WriteMessage($"\t {rasterDef.SearchForActivePath}\n");
ed.WriteMessage($"\t {rasterDef.SourceFileName}\n");
}
}
tr.Commit();
}
}
catch (System.Exception ex)
{
ed?.WriteMessage(ex.Message);
}
}
//Get (Modelspace) Images
using (var tr = db.TransactionManager.StartTransaction())
{
var msId = SymbolUtilityServices.GetBlockModelSpaceId(db);
var ms = (BlockTableRecord)tr.GetObject(msId, OpenMode.ForWrite);
//Embedded only: var rasterImageIds = ms.Cast<ObjectId>().Where(n => n.ObjectClass.DxfName.Equals("AECIDBEMBEDDEDRASTERIMAGE", StringComparison.OrdinalIgnoreCase));
var rasterImageIds = ms.Cast<ObjectId>().Where(n => n.ObjectClass.DxfName.Contains("RASTERIMAGE", StringComparison.OrdinalIgnoreCase));
if (rasterImageIds != null)
{
foreach (ObjectId id in rasterImageIds)
{
var rasterImage = tr.GetObject(id, OpenMode.ForRead) as RasterImage;
ed.WriteMessage($"{rasterImage.Name}\n");
ed.WriteMessage($"\t pos:{rasterImage.Position.ToString()}\n");
ed.WriteMessage($"\t angle:{rasterImage.Rotation * 180.0 / Math.PI}\n");
ed.WriteMessage($"\t size:{rasterImage.Width} X {rasterImage.Height}\n");
var rasterDef = tr.GetObject(rasterImage.ImageDefId, OpenMode.ForRead) as RasterImageDef;
if (rasterDef.IsEmbedded)
{
ed.WriteMessage($"\t embedded\n");
}
else //Not Embedded image
{
ed.WriteMessage($"\t pathname:{rasterDef.ActiveFileName}");
}
}
}
tr.Commit();
}
//Attach Image
var imagePathname = @"C:\Temp\Raster.tif";
var imageName = Path.GetFileNameWithoutExtension(imagePathname);
using (var tr = db.TransactionManager.StartTransaction())
{
var imageDict = (DBDictionary)tr.GetObject(imageDictId, OpenMode.ForRead);
//?Is Image attached already
if (imageDict.Contains(imageName))
{
imageDefId = imageDict.GetAt(imageName);
var rasterDef = tr.GetObject(imageDefId, OpenMode.ForWrite) as RasterImageDef;
}
else //Attach Image
{
using (var rasterDef = new RasterImageDef())
{
rasterDef.SourceFileName = imagePathname;
rasterDef.Load();
imageDict.UpgradeOpen();
imageDefId = imageDict.SetAt(imageName, rasterDef);
tr.AddNewlyCreatedDBObject(rasterDef, true);
}
}
tr.Commit();
}
//Insert Image into Modelspace
var rasterPos = new Point3d(100, 200, 0);
var rasterAngle = 0 * Math.PI / 180.0;
var rasterScale = 1;
using (var tr = db.TransactionManager.StartTransaction())
{
using (var rasterImage = new RasterImage())
{
rasterImage.SetDatabaseDefaults();
rasterImage.ImageDefId = imageDefId;
var msId = SymbolUtilityServices.GetBlockModelSpaceId(db);
var ms = (BlockTableRecord)tr.GetObject(msId, OpenMode.ForWrite);
ms.AppendEntity(rasterImage);
tr.AddNewlyCreatedDBObject(rasterImage, true);
var rasterDef = tr.GetObject(imageDefId, OpenMode.ForWrite) as RasterImageDef;
var wRaster = default(Vector3d);
var hRaster = default(Vector3d);
var wImage = rasterDef.ResolutionMMPerPixel.X * rasterImage.ImageWidth;
var hImage = rasterDef.ResolutionMMPerPixel.Y * rasterImage.ImageHeight;
if (rasterScale != 1)
{
if (db.Measurement == MeasurementValue.English)
{
wImage /= 25.4;
hImage /= 25.4;
}
wImage *= rasterScale;
hImage *= rasterScale;
}
wRaster = new Vector3d(wImage, 0, 0);
hRaster = new Vector3d(0, hImage, 0);
var coordinateSystem = new CoordinateSystem3d(rasterPos, wRaster, hRaster);
rasterImage.Orientation = coordinateSystem;
rasterImage.Rotation = rasterAngle;
rasterImage.ImageTransparency = true;
rasterImage.Name = imageName;
RasterImage.EnableReactors(true);
rasterImage.AssociateRasterDef(rasterDef);
var rasterRefId = rasterImage.ObjectId;
//Vectors above Image
var moveBelowIds = new ObjectIdCollection(new ObjectId[] { rasterRefId });
var btrDrawOrder = (DrawOrderTable)tr.GetObject(ms.DrawOrderTableId, OpenMode.ForWrite);
btrDrawOrder.MoveToBottom(moveBelowIds);
}
tr.Commit();
}
//Embed
// Need RasterDesign to do that
using (var tr = db.TransactionManager.StartTransaction())
{
var rasterDef = tr.GetObject(imageDefId, OpenMode.ForWrite) as RasterImageDef;
//not implemented yet: rasterDef.Embed();
tr.Commit();
}