я использую следующий код для преобразования BitmapSource в массив байтов, представляющий PNG:Преобразовать массив байтов PNG в массив байтов JPEG
/// <summary>
/// Converts BitmapSource to a PNG Bitmap.
/// </summary>
/// <param name="source">The source object to convert.</param>
/// <returns>byte array version of passed in object.</returns>
public static byte[] ToPngBytes(this BitmapSource source)
{
// Write the source to the bitmap using a stream.
using (MemoryStream outStream = new MemoryStream())
{
// Encode to Png format.
var enc = new Media.Imaging.PngBitmapEncoder();
enc.Frames.Add(Media.Imaging.BitmapFrame.Create(source));
enc.Save(outStream);
// Return image bytes.
return outStream.ToArray();
}
}
Я ищу, чтобы сделать ту же операцию, но преобразовать массив байтов, что это Jpeg без необходимости сначала создавать BitmapSource.
Подпись должна выглядеть следующим образом:
public static byte[] ToPngBytes(this byte[] jpegBytes)
Этот код работает, но кажется неэффективным, как я использовать Записываемый Bitmap, чтобы сделать это:
private WriteableBitmap colorBitmap;
private byte[] GetCompressedImage(byte[] imageData, System.Windows.Media.PixelFormat format, int width, int height, int bytesPerPixel = sizeof(Int32))
{
// Initialise the color bitmap converter.
if (colorBitmap == null)
colorBitmap = new WriteableBitmap(width, height, 96.0, 96.0, format, null);
// Write the pixels to the bitmap.
colorBitmap.WritePixels(new Int32Rect(0, 0, width, height), imageData, width * bytesPerPixel, 0);
// Memory stream used for encoding.
using (MemoryStream memoryStream = new MemoryStream())
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
// Add the frame to the encoder.
encoder.Frames.Add(BitmapFrame.Create(colorBitmap));
encoder.Save(memoryStream);
// Get the bytes.
return memoryStream.ToArray();
}
}
Что об этом ? http://msdn.microsoft.com/en-us/library/twss4wb0%28v=vs.90%29.aspx – laszlokiss88
К сожалению, это будет работать только при сохранении на диске, но это во время выполнения и должно быть из байта [ ] source. Спасибо, хотя! –
Вы можете заменить свой WriteableBitmap, вызвав статический метод BitmapSource.Create вместо этого: http://msdn.microsoft.com/en-us/library/ms616045.aspx – Aybe