为了账号安全,请及时绑定邮箱和手机立即绑定

将位图转换为 ImageSource 后资源 png 质量下降

将位图转换为 ImageSource 后资源 png 质量下降

C#
慕容708150 2023-04-29 09:49:50
我有一个透明的 PNG,当我将它转换为 ImageSource 时,它会损失很多质量。我所做的转换如下:public static ImageSource ToImageSource()    {   Bitmap bitmap = Properties.Resources.Image;        IntPtr hBitmap = bitmap.GetHbitmap();        ImageSource wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap(            hBitmap,            IntPtr.Zero,            Int32Rect.Empty,            BitmapSizeOptions.FromEmptyOptions());        RenderOptions.SetBitmapScalingMode(wpfBitmap, BitmapScalingMode.HighQuality);        return wpfBitmap;    }但是质量真的很差。当我直接调用计算机上的文件时,质量是正确的:<DataGridTemplateColumn Width="14" IsReadOnly="True">                <DataGridTemplateColumn.CellTemplate>                    <DataTemplate>                        <Image Source="C:\Users\MyUser\Desktop\Image.png" Width="14" Height="14"></Image>                    </DataTemplate>                </DataGridTemplateColumn.CellTemplate>            </DataGridTemplateColumn>有没有另一种方法可以在不损失质量和透明度的情况下转换资源?
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

或者...试试这个 :)


public static ImageSource ToImageSource()

{

     Bitmap bitmap = Properties.Resources.Image;

     IntPtr hBitmap = bitmap.GetHbitmap();


     ImageSource wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap(

                        hBitmap,

                        IntPtr.Zero,

                        new Int32Rect(0, 0, bitmap.Width, bitmap.Height),

                        BitmapSizeOptions.FromEmptyOptions());


      DeleteObject(hBitmap);

      return wpfBitmap;

}


[System.Runtime.InteropServices.DllImport("gdi32.dll")]

public static extern bool DeleteObject(IntPtr hObject);

调用DeleteObject将释放 GDI 句柄。


查看完整回答
反对 回复 2023-04-29
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

遗憾的是我无法测试您的代码,但我认为您必须将模式设置为 NearestNeighbor


尝试这个


public static ImageSource ToImageSource()

{   

   Bitmap bitmap = Properties.Resources.Image;

   IntPtr hBitmap = bitmap.GetHbitmap();


   ImageSource wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap(

       hBitmap,

       IntPtr.Zero,

       Int32Rect.Empty,

       BitmapSizeOptions.FromEmptyOptions());

   RenderOptions.SetBitmapScalingMode(wpfBitmap, BitmapScalingMode.NearestNeighbor);


   return wpfBitmap;

}


查看完整回答
反对 回复 2023-04-29
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

尝试这个:

BitmapImage image = new BitmapImage(new Uri("your image path here", UriKind.Relative));

编辑:假设您有图像路径。


查看完整回答
反对 回复 2023-04-29
  • 3 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信