Here is the code I used for '09. If you are working in an earlier version, then it will have to change, as they methods used were not accessible yet. If anything is missing, let me know, and I'll post it back.
private MyImageInformation[] FindImages (Database db) {
using (Transaction Trans = db.TransactionManager.StartTransaction()) {
DBDictionary LoDict = (DBDictionary)Trans.GetObject(db.LayoutDictionaryId, OpenMode.ForRead);
ObjectId ImgDictId = RasterImageDef.GetImageDictionary(db);
if (ImgDictId == ObjectId.Null) return null;
DBDictionary ImgDict = (DBDictionary)Trans.GetObject(ImgDictId, OpenMode.ForRead);
if (ImgDict.Count.Equals(0)) return null;
MyImageInformation[] ImInfoArray = new MyImageInformation[ImgDict.Count];
int i = 0;
foreach (DictionaryEntry de in ImgDict) {
string ImName = de.Key as string;
ObjectId ObjId = (ObjectId)de.Value;
RasterImageDef rid = Trans.GetObject(ObjId, OpenMode.ForRead) as RasterImageDef;
if (rid == null) continue;
MyImageInformation ImInfo = new MyImageInformation();
ImInfo.ImageName = ImName;
ImInfo.IsEmbedded = rid.IsEmbedded;
ImInfo.ImagePath = rid.SourceFileName;
if (string.Compare(ImInfo.ImagePath, string.Empty).Equals(0))
ImInfo.ImagePath = rid.ActiveFileName;
ImInfo.IsLoaded = rid.IsLoaded;
bool LockedLayers;
int ImCnt = rid.GetEntityCount(out LockedLayers);
if (ImCnt.Equals(0)) ImInfo.IsReferenced = false;
else {
string FoundAt = MyUtility.WillLoad(ImInfo.ImagePath, db);
if (!string.Compare(FoundAt, string.Empty).Equals(0))
ImInfo.ImageFoundAtPath = FoundAt;
ImInfo.IsReferenced = true;
}
ObjectIdCollection ImLocIdCol = rid.GetPersistentReactorIds();
string[] ImLocArray = new string[ ImLocIdCol.Count - 1 ];
int j = 0;
foreach ( ObjectId id in ImLocIdCol ) {
DBObject dbo = Trans.GetObject( id, OpenMode.ForRead ) as DBObject;
if ( dbo.GetRXClass().DxfName != "IMAGEDEF_REACTOR" ) continue;
RasterImage Im = Trans.GetObject( dbo.OwnerId, OpenMode.ForRead ) as RasterImage;
BlockTableRecord tempBtr = Trans.GetObject( Im.OwnerId, OpenMode.ForRead ) as BlockTableRecord;
if ( tempBtr.IsLayout ) {
Layout tempLo = Trans.GetObject( tempBtr.LayoutId, OpenMode.ForRead ) as Layout;
ImLocArray[j] = "Layout: " + tempLo.LayoutName;
}
else ImLocArray[j] = "Block: " + tempBtr.Name;
j++;
}
ImInfo.InsertedWhere = ImLocArray;
ImInfoArray[i] = ImInfo;
++i;
}
return ImInfoArray;
}
}
public class MyImageInformation {
private string ImName;
private string ImPath;
private string ImFoundAt = string.Empty;
private bool Loaded;
private bool Embedded;
private bool IsRefed;
private string[] ImLoc;
public MyImageInformation() {}
public MyImageInformation (string ImName, string ImPath, bool Loaded) {}
public string ImageName {
get { return ImName; }
set { ImName = value; }
}
public string ImagePath {
get { return ImPath; }
set { ImPath = value; }
}
public string ImageFoundAtPath {
get { return ImFoundAt; }
set { ImFoundAt = value;}
}
public bool IsLoaded {
get { return Loaded; }
set { Loaded = value; }
}
public bool IsEmbedded {
get { return Embedded; }
set { Embedded = value; }
}
public bool IsReferenced {
get { return IsRefed; }
set { IsRefed = value; }
}
public string[] InsertedWhere {
get { return ImLoc; }
set { ImLoc = value; }
}
}