Ứng dụng của tôi sử dụng máy ảnh để chụp ảnh và tải nó lên Flickr. Tôi muốn nén hình ảnh xuống để quá trình tải lên không mất thời gian như hiện tại. Tôi đã thử cả BitmapSource và phương thức 'SaveJpeg' của WriteableBitmap để thực hiện điều này nhưng không thành công. Nguồn bitmap không có các thành viên tương tự có sẵn trong Silverlight/WP như trong phiên bản .NET framework đầy đủ và phương thức SaveJpeg mà WriteableBitmap đã giữ cho tôi một lỗi 'Dòng này không hỗ trợ ghi vào nó'.Làm cách nào để tôi nén hình ảnh trên Windows Phone
Đây là những gì tôi hiện đang làm trong CameraCaptureTask xử lý sự kiện hoàn thành của tôi:
private void CameraCaptureCompleted(object sender, PhotoResult e)
{
if (e == null || e.TaskResult != TaskResult.OK)
{
return;
}
BitmapImage bitmap = new BitmapImage {CreateOptions = BitmapCreateOptions.None};
bitmap.SetSource(AppHelper.LoadImage(e.ChosenPhoto));
WriteableBitmap writeableBitmap = new WriteableBitmap(bitmap);
// Encode the WriteableBitmap object to a JPEG stream.
writeableBitmap.SaveJpeg(e.ChosenPhoto, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 85);
}
Mã này mang lại cho tôi một: "Dòng không hỗ trợ viết" lỗi.
Có cách nào khác để tôi có thể nén hình ảnh hoặc tôi có phải viết một thuật toán nén không?
CẬP NHẬT CỐ ĐỊNH !!
private void CameraCaptureCompleted(object sender, PhotoResult e)
{
if (e == null || e.TaskResult != TaskResult.OK)
{
return;
}
BitmapImage bitmap = new BitmapImage {CreateOptions = BitmapCreateOptions.None};
bitmap.SetSource(AppHelper.LoadImage(e.ChosenPhoto));
WriteableBitmap writeableBitmap = new WriteableBitmap(bitmap);
// Encode the WriteableBitmap object to a JPEG stream.
writeableBitmap.SaveJpeg(new MemoryStream(), writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 85);
}
Tôi đã cố gắng ghi vào luồng nguồn. Doh!
Cảm ơn.
PhotoResult e không phải là luồng nên SaveJpeg sẽ không hoạt động nhắm mục tiêu, bạn muốn lưu ảnh của mình vào đâu? IsolatedStorage hoặc một luồng tạm thời hoặc ở một nơi khác ... – ameer
Để bạn biết, khi bạn lưu nó vào MemoryStream mới(), bạn không có tham chiếu đến nơi bạn đã lưu nó ngay bây giờ, tốt nhất để tạo luồng bộ nhớ trước, chuyển nó vào luồng bộ nhớ sau đó một khi bạn nhận được nó nén hoặc tải nó trực tiếp từ dòng bộ nhớ hoặc lưu nó vào bộ nhớ bị cô lập và tải nó lên sau. – ameer