문제

나는 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. 비트 맵 데이터를 바이트 어레이에 복사 할 수 있습니다. 그러나 솔직히 픽셀의 형식이 무엇인지 확실하지 않습니다. 원래로드 된 이미지의 종류에 의존 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top