c # - Uønsket anti-aliasing, når du tegner bitmap på et vindue

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg gør et billede til en System.Drawing.Bitmap og derefter tegner det i et vindue, men jeg kan se, at kanterne bliver anti-aliased. Hvordan forhindrer dette?


Noget mere detaljeret. Bitmapet er oprettet som sådan:


new Bitmap (this.Width, this.Height, Imaging.PixelFormat.Format32bppArgb)


Jeg sætter derefter pixels til enten Color.Black eller Color.White. Jeg har forsøgt at bruge både Bitmap.SetPixel og skrive bytes direkte til bitmap-dataene ved hjælp af Bitmap.LockBits.


Når bitmapet er klar, tegner jeg det i min Form.OnPaint overstyring:


            pea.Graphics.DrawImage
                ( !this.bitmap
                , this.ClientRectangle
                , new Rectangle (0, 0, this.Width, this.Height)
                , GraphicsUnit.Pixel
                )


Hver pixel skal enten være sort eller hvid, men jeg kan se, at pixels ved kanterne er grå.

Bedste reference


Indstil egenskaben InterpolationMode til NærmesteNeighbor og PixelOffsetMode til None.


pea.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
pea.Graphics.PixelOffsetMode = PixelOffsetMode.None; // or PixelOffsetMode.Half


Tegning af bitmappen uskaleret er bedst. I så fald vil du sandsynligvis bruge funktionerne ClientSize.Width og Height til at initialisere bitmappen. Odds er gode, at du gør bitmapet for stort lige nu ved at inkludere formularens grænse og billedtekst. Jeg kan ikke fortælle fra uddraget.