在 Silverlight 中从图像渲染 WriteableBitmap 时出现问题

发布于 2024-12-18 13:10:57 字数 994 浏览 5 评论 0原文

我有一个下一个问题,我需要将字节数组转换为 WriteableBitmap 并调整大小。我编写下一个代码。

private byte[] ResizeImage(byte[] array, double maxWidth, double maxHeight)
{
    WriteableBitmap wb = null;

    var stream = new MemoryStream(array);
    stream.Seek(0, SeekOrigin.Begin);
    var bmp = new WriteableBitmap(0, 0);
    bmp.SetSource(stream);
    stream.Close();
    var img = new Image();
    img.Source = bmp;
    double scaleX = 1;
    double scaleY = 1;
    if (bmp.PixelHeight > maxHeight)
    {
        scaleY = maxHeight / bmp.PixelHeight;
    }
    if (bmp.PixelWidth > maxWidth)
    {
        scaleX = maxWidth / bmp.PixelWidth;
    }
    wb = new WriteableBitmap(0, 0);
    var scale = Math.Min(scaleY, scaleX);
    wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale });
    wb.Invalidate();
    return Utils.Encode(wb);

}

调用 wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale }); 后,wb 的像素为零。

请帮忙。

I have a next problem, I need to convert array of bytes to WriteableBitmap with resize. I write next code.

private byte[] ResizeImage(byte[] array, double maxWidth, double maxHeight)
{
    WriteableBitmap wb = null;

    var stream = new MemoryStream(array);
    stream.Seek(0, SeekOrigin.Begin);
    var bmp = new WriteableBitmap(0, 0);
    bmp.SetSource(stream);
    stream.Close();
    var img = new Image();
    img.Source = bmp;
    double scaleX = 1;
    double scaleY = 1;
    if (bmp.PixelHeight > maxHeight)
    {
        scaleY = maxHeight / bmp.PixelHeight;
    }
    if (bmp.PixelWidth > maxWidth)
    {
        scaleX = maxWidth / bmp.PixelWidth;
    }
    wb = new WriteableBitmap(0, 0);
    var scale = Math.Min(scaleY, scaleX);
    wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale });
    wb.Invalidate();
    return Utils.Encode(wb);

}

After call wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale });, wb has zero pixels.

Help please.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半衬遮猫 2024-12-25 13:10:57
private byte[] ResizeImage(byte[] array, int maxWidth, int maxHeight)
{
    var stream = new MemoryStream(array);
    stream.Seek(0, SeekOrigin.Begin);

    var bmp = new BitmapImage();
    bmp.SetSource(stream);
    stream.Close();
    var img = new Image();
    img.Source = new BitmapImage();

    double scaleX = 1;
    double scaleY = 1;
    if (bmp.PixelHeight > maxHeight)
    {
        scaleY = maxHeight / bmp.PixelHeight;
    }
    if (bmp.PixelWidth > maxWidth)
    {
        scaleX = maxWidth / bmp.PixelWidth;
    }

    WriteableBitmap wb = new WriteableBitmap(maxWidth, maxHeight);
    var scale = Math.Min(scaleY, scaleX);
    wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale });
    wb.Invalidate();

    return Utils.Encode(wb);
}
private byte[] ResizeImage(byte[] array, int maxWidth, int maxHeight)
{
    var stream = new MemoryStream(array);
    stream.Seek(0, SeekOrigin.Begin);

    var bmp = new BitmapImage();
    bmp.SetSource(stream);
    stream.Close();
    var img = new Image();
    img.Source = new BitmapImage();

    double scaleX = 1;
    double scaleY = 1;
    if (bmp.PixelHeight > maxHeight)
    {
        scaleY = maxHeight / bmp.PixelHeight;
    }
    if (bmp.PixelWidth > maxWidth)
    {
        scaleX = maxWidth / bmp.PixelWidth;
    }

    WriteableBitmap wb = new WriteableBitmap(maxWidth, maxHeight);
    var scale = Math.Min(scaleY, scaleX);
    wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale });
    wb.Invalidate();

    return Utils.Encode(wb);
}
回首观望 2024-12-25 13:10:57

尝试更改:

wb = new WriteableBitmap(0, 0);

至:

wb = new WriteableBitmap(maxWidth, maxHeight);

Try changing:

wb = new WriteableBitmap(0, 0);

To:

wb = new WriteableBitmap(maxWidth, maxHeight);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文