Сохранение тега в файл изображения и повторная загрузка его в память.C#

Место общения программистов C#
Ответить
Anonymous
 Сохранение тега в файл изображения и повторная загрузка его в память.

Сообщение Anonymous »

Кажется, мне не удается прикрепить тег, который я добавляю к изображению, после сохранения изображения в поток памяти. Есть идеи, как мне сделать так, чтобы этот тег оказался в массиве байтов imageCache после того, как я попытаюсь скопировать его в другой поток памяти?
byte[] imageCache = File.ReadAllBytes(@"c:\test\test.tif");
using (MemoryStream msOut = new MemoryStream())
{
using (MemoryStream ms = new MemoryStream(imageCache))
{
using (Image image = Image.FromStream(ms))
{
/*
Total tags on page 1 of 3: 20 tags
Image does not show the tag I want to add. This is expected.
*/

// Select the correct page (1 of 3)
image.SelectActiveFrame(FrameDimension.Page, 0);

// Add a tag to the image's page 1
PropertyItem property = CreateBasePropertyItem();
property.Id = 38888;
property.Type = 2;
property.Value = Encoding.ASCII.GetBytes("This is a test tag.");
property.Len = property.Value.Length;

// Save the tag on the image's page 1
image.SetPropertyItem(property);

/*
Total tags on page 1 of 3: 21 tags
Image does show the tag I just added. This is expected.
*/

// Save the image to a new memory stream
image.Save(msOut, image.RawFormat);
}
}

// Convert the new image to a byte array to replace the cached byte array
imageCache = msOut.ToArray();
}

using (MemoryStream ms = new MemoryStream(imageCache))
{
using (Image image = Image.FromStream(ms))
{
/*
Total tags on page 1 of 3: 13 tags
Image does not show the new tag I added above. This is not expected.
*/
}
}

Просто чтобы никому не приходилось спрашивать, в том числе и об этом, хотя это не имеет отношения к цели моего вопроса.
private PropertyItem CreateBasePropertyItem()
{
BindingFlags flags = (BindingFlags)(-20);
PropertyItem pi = (PropertyItem)typeof(PropertyItem)
.Assembly
.CreateInstance("System.Drawing.Imaging.PropertyItem", false, flags, null, null, null, null);

return pi;
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-memory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»