private void write(ImageObject obj) { // Get image details UInt16ArrayTag rect = (UInt16ArrayTag)obj.FindFirstTag(TagId.ImageRect); UInt16ArrayTag size = (UInt16ArrayTag)obj.FindFirstTag(TagId.ImageSize); UInt32Tag streamId = (UInt32Tag)obj.FindFirstTag(TagId.ImageStream); int x = rect.Value[0]; int y = rect.Value[1]; int w = rect.Value[2]; int h = rect.Value[3]; ushort imageId = (ushort)streamId.Value; ImageStreamObject imageObj = (ImageStreamObject)book.FindObject(imageId); string type = ImageObject.getImageTypeAsString(imageObj.Contents); MemoryStream memStream = new MemoryStream(imageObj.Data); Bitmap image = new Bitmap(memStream); ImageInfo info = new ImageInfo(); info.image = image; info.position = new Rectangle(x, y, w, h); // @@IMAGENAME@@ will be replaced during save with the name of the file info.name = "@@IMAGENAME@@_" + (images.Count + 1); info.type = type; images.Add(info); handleImage(info); }
private void addPageImage(PageObject page, string src, ushort width, ushort height) { // Load image and then save it out as a Jpeg (just so we know what // format the image is - we could of course just check the extension // but the LRF format only supports a few image types // Also JPeg seems to be better supported byte[] data = null; string file = src; if (file.StartsWith("http")) { // Grab image file = "c:\\image.jpg"; System.Net.WebClient webClient = new System.Net.WebClient(); webClient.DownloadFile(src, file); } file = file.Replace("file:///", "").Replace("%20", " "); if (!File.Exists(file)) { return; } System.Drawing.Bitmap img = new System.Drawing.Bitmap(file); MemoryStream mem = new MemoryStream(); img.Save(mem, System.Drawing.Imaging.ImageFormat.Jpeg); data = mem.GetBuffer(); mem.Close(); img.Dispose(); // Create a block Object BlockObject block = new BlockObject(GetNextObjId()); block.BlockLink = m_BlockAttr.ID; block.BlockHeight = height; block.BlockWidth = width; block.BlockRule = 34; m_Book.Objects.Add(block); // Create our ImageObject ImageObject io = new ImageObject(GetNextObjId()); io.setRect(0, 0, width, height); io.setSize(width, height); m_Book.Objects.Add(io); // Center the image block on the page int left = (BBeB.ReaderPageWidth - width) / 2; if (left < 0) { left = 0; } page.StreamTags.Add(new UInt16Tag(TagId.LocationX, (ushort)left)); page.StreamTags.Add(new UInt32Tag(TagId.Link, block.ID)); // Set the image id in the block block.ObjectLink = io.ID; ushort streamId = GetNextObjId(); io.setImageStreamId(streamId); // Create our ImageStream ImageStreamObject istream = new ImageStreamObject(streamId); istream.Data = data; istream.Contents = StreamContents.JpegImage; m_Book.Objects.Add(istream); ObjectInfoObject objInfo = new ObjectInfoObject(GetNextObjId()); objInfo.addLayoutTags(block.ID); m_Book.Objects.Add(objInfo); page.InfoObj = objInfo; // Now add out objects to the page page.Children.Add(block); page.Children.Add(io); page.Children.Add(m_BlockAttr); page.Children.Add(istream); }