热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我需要我的缩放图像在C#中别名-IneedmyscaledimagetobealiasedinC#

Thismightbeanoddquestion,butwhenIscalemyimageinC#Ineedittobepixelatedandnotant

This might be an odd question, but when I scale my image in C# I need it to be pixelated and not anti-aliased. Just like in MSpaint when you scale.

这可能是一个奇怪的问题,但是当我在C#中扩展我的图像时,我需要将其设置为像素化而不是消除锯齿。就像在缩放时的MSpaint一样。

I hope images anti-alias by default in C#, or else I changed something I didn't want to.

我希望在C#中默认图像反别名,否则我改变了我不想要的东西。

I've tried playing around with the Graphics.InterpolationMode but no luck there. I'm using a Bitmap object to hold the image and it's being constructed like so:

我试过玩Graphics.InterpolationMode但没有运气。我正在使用Bitmap对象来保存图像,它的构造如下:

// A custom control holds the image
this.m_ZoomPanPicBox.Image = new Bitmap(szImagePath);

And a brief synapsis of the custom control:

以及自定义控件的简要概述:

class ZoomPanPicBox : ScrollableControl
{
    Image m_image;
    float m_zoom = 1.0f;
    InterpolationMode m_interpolationMode;
    ...
    ////////////////////////////////////////////////////////
    public ZoomPanPicBox()
    {
        //Double buffer the control
        this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);

        this.AutoScroll=true;
    }
    ////////////////////////////////////////////////////////
    protected override void OnPaint(PaintEventArgs e)
    {
        //if no image, don't bother
        if(m_image==null)
        {
            base.OnPaintBackground(e);
            return;
        }

        //Set up a zoom matrix
        Matrix mx = new Matrix(m_zoom,0,0,m_zoom,0,0);

        //now translate the matrix into position for the scrollbars
        mx.Translate(this.AutoScrollPosition.X / m_zoom, this.AutoScrollPosition.Y / m_zoom);

        //use the transform
        e.Graphics.Transform = mx;

        //and the desired interpolation mode
        e.Graphics.InterpolatiOnMode= m_interpolationMode;

        //Draw the image ignoring the images resolution settings.
        e.Graphics.DrawImage(m_image,new Rectangle(0,0,this.m_image.Width,this.m_image.Height),0,0,m_image.Width, m_image.Height,GraphicsUnit.Pixel);

        base.OnPaint(e);
    }

Any ideas? Thanks.

有任何想法吗?谢谢。

2 个解决方案

#1


3  

Actually, you're right with InterpolationMode, as the docs say. Just set it to InterpolationMode.NearestNeighbor. In your code sample, you never set m_interpolationMode.

实际上,正如文档所说,你对InterpolationMode是正确的。只需将其设置为InterpolationMode.NearestNeighbor。在您的代码示例中,您永远不会设置m_interpolationMode。

#2


0  

Well, you could implement the scale yourself and do a simple linear interpolation (I.E. don't do any neighbor averaging like bicubic)... Those look nice and blocky.

好吧,你可以自己实现比例并做一个简单的线性插值(I.E.不要像双三次那样做任何邻居平均)......那些看起来很好而且块状。


推荐阅读
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 本文介绍了如何使用n3-charts绘制以日期为x轴的数据,并提供了相应的代码示例。通过设置x轴的类型为日期,可以实现对日期数据的正确显示和处理。同时,还介绍了如何设置y轴的类型和其他相关参数。通过本文的学习,读者可以掌握使用n3-charts绘制日期数据的方法。 ... [详细]
  • 本文总结和分析了JDK核心源码(2)中lang包下的基础知识,包括常用的对象类型包和异常类型包。在对象类型包中,介绍了Object类、String类、StringBuilder类、StringBuffer类和基本元素的包装类。在异常类型包中,介绍了Throwable类、Error类型和Exception类型。这些基础知识对于理解和使用JDK核心源码具有重要意义。 ... [详细]
  • ihaveusedthedelphidatabindingwizardwithmyxmlfile,andeverythingcompilesandrunsfine. ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
author-avatar
执信电影频道
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有