Silverlight의 BitMapimage에서 바이트 []를 얻을 수 있습니까?
-
13-09-2019 - |
문제
나는 Silverlight와 WCF 서비스 사이에서 이미지를 앞뒤로 전달하려고합니다. 가능하다면 나는 a를 통과하고 싶다 System.Windows.Media.Imaging.BitmapImage
, 이는 클라이언트가 전환을 수행 할 필요가 없기 때문입니다.
그러나 어느 시점 에서이 이미지를 데이터베이스에 저장해야합니다. 즉, 이미지 표현이 byte[]
. 나는 만들 수있다 BitmapImage
a byte[]
배열을 a로 읽음으로써 MemoryStream
그리고 사용 BitmapImage.SetSource()
. 그러나 나는 다른 방식으로 변환하는 방법을 찾을 수없는 것 같습니다. BitmapImage
에게 byte[]
. 여기서 명백한 것을 놓치고 있습니까?
전혀 도움이되면 변환 코드가 서버에서 실행될 수 있습니다. 즉, Silverlight-Safe 일 필요는 없습니다.
해결책
이것을 사용하십시오 :
public byte[] GetBytes(BitmapImage bi)
{
WriteableBitmap wbm = new WriteableBitmap(bi);
return wbm.ToByteArray();
}
어디에
public static byte[] ToByteArray(this WriteableBitmap bmp)
{
// Init buffer
int w = bmp.PixelWidth;
int h = bmp.PixelHeight;
int[] p = bmp.Pixels;
int len = p.Length;
byte[] result = new byte[4 * w * h];
// Copy pixels to buffer
for (int i = 0, j = 0; i < len; i++, j += 4)
{
int color = p[i];
result[j + 0] = (byte)(color >> 24); // A
result[j + 1] = (byte)(color >> 16); // R
result[j + 2] = (byte)(color >> 8); // G
result[j + 3] = (byte)(color); // B
}
return result;
}
다른 팁
나는 같은 문제가 있었다. 나는 찾았다 ImageTools 라이브러리 따라서 작업이 더 쉬워집니다.
라이브러리를 가져 와서 참조하십시오
using (var writingStream = new MemoryStream())
{
var encoder = new PngEncoder
{
IsWritingUncompressed = false
};
encoder.Encode(bitmapImageInstance, writingStream);
// do something with the array
}
사용해보십시오 copypixels. 비트 맵 데이터를 바이트 어레이에 복사 할 수 있습니다. 그러나 솔직히 픽셀의 형식이 무엇인지 확실하지 않습니다. 원래로드 된 이미지의 종류에 의존 할 것입니다.
제휴하지 않습니다 StackOverflow