2010-08-04 3 views
2

Я разрабатываю проект, который включает в себя галерею изображений, управляемую административной панелью. Я хочу показать миниатюры для администратора на панели администратора, которая активна и будет отображаться конечному пользователю.Работа с изображениями и растровыми изображениями в C#?

Хорошо. Я храню изображения в db в двух параметрах: ImageData (byte []), ImageMimeType. Поэтому я хочу хранить миниатюрные версии изображений при первом образе сохранения изображений. Я нашел пример кода, чтобы изменить размер и манипулировать фотографии в этом адреса link text:

private static Image cropImage(Image img, Rectangle cropArea) 
{ 
    Bitmap bmpImage = new Bitmap(img); 
    Bitmap bmpCrop = bmpImage.Clone(cropArea, 
    bmpImage.PixelFormat); 
    return (Image)(bmpCrop); 
} 

эта функция принимает изображения в качестве параметра. Но у меня есть ImageData (byte []).

Итак, как преобразовать массив байтов в Image и Image в массив байтов?

ответ

2

изображение из массива байтов

public Image byteArrayToImage(byte[] byteArray) 
{ 
    MemoryStream ms = new MemoryStream(byteArray); 
    return Image.FromStream(ms); 
} 

Image Для массива байтов

public byte[] imageToByteArray(Image image) 
{ 
MemoryStream ms = new MemoryStream(); 
return image.Save(ms,ImageFormat.Jpeg).ToArray(); 
} 
2
public Image ByteArrayToImage(byte[] byteArrayIn) 
{ 
    MemoryStream ms = new MemoryStream(byteArrayIn); 
    Image returnImage = Image.FromStream(ms); 
    return returnImage; 
} 

Найдено here, который также имеет много других примеров

+1

Возможно, вам стоит ссылаться на веб-страницу, если вы собираетесь прямо поднять этот пример ... – Ian

+0

вы правы, я добавлю его – w69rdy

4

Создать изображение из потока:

private static Image cropImage(byte[] imgArray, Rectangle cropArea) 
{ 
    MemoryStream ms = new MemoryStream(imgArray); 
    Image img = Image.FromStream(ms); 
    Bitmap bmpImage = new Bitmap(img); 
    Bitmap bmpCrop = bmpImage.Clone(cropArea, 
    bmpImage.PixelFormat); 
    return (Image)(bmpCrop); 
} 
0

Что-то вроде этого?

Bitmap bmpImage = new Bitmap(img); 
MemoryStream stream = new MemoryStream(); 
try { 
    bmpImage.Save(stream, bmpImage.RawFormat); 
    byte[] bytes = stream.ToArray(); 
} 
finally { 
    stream.Close(); 
    ((IDisposable)stream).Dispose(); 
} 

Также вы можете создать MemoryStream из байт [], а затем загрузить изображение из этого потока.