Сохранение растрового изображения в MemoryStream

Должен ли я выделять память или только объект потока памяти: это нормально?

MemoryStream memoryStream = new MemoryStream();
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);

Если мне нужно определить размер MemoryStream, как я могу получить его из Bitmap?


person Joseph    schedule 29.12.2011    source источник
comment
Это должно быть просто прекрасно; вы испытываете определенные проблемы?   -  person Pieter van Ginkel    schedule 29.12.2011


Ответы (2)


.NET — это управляемая среда: в частности, распределением памяти обычно управляет среда выполнения .NET от вашего имени. Обычно вам не нужно выделять память самостоятельно.

Однако иногда вам нужно сообщить среде выполнения, когда вы закончили работу с памятью, используя Close() или Dispose(). Оператор using можно использовать для упаковки ресурса, такого как MemoryStream, чтобы сообщить среде выполнения, что память может быть освобождена.

person Jeremy McGee    schedule 29.12.2011
comment
Спасибо, теперь думаю понятно. Я планировал сохранить поток в своем классе во время работы, но, похоже, я должен сохранять его только во время процесса, а не держать его все время, пока мое приложение живо. Я подумал, что лучше сохранить изображение как поток памяти, а не растровое изображение. - person Joseph; 30.12.2011

Вам не нужно предварительно выделять память.

Вы можете получить размер позже с помощью memoryStream.Length.


После того, как вы сделали все, что вам нужно, со своим memoryStream, обязательно удалите его (или оберните все это в оператор using).

person George Duckett    schedule 29.12.2011
comment
Спасибо, теперь думаю понятно. Я планировал сохранить поток в своем классе во время работы, но, похоже, я должен сохранять его только во время процесса, а не держать его все время, пока мое приложение живо. Я подумал, что лучше сохранить изображение как поток памяти, а не растровое изображение. - person Joseph; 30.12.2011