Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C#] karakter in tekstvak tekenen via GDI

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik heb een probleempje, en kan me niet onmiddellijk een oplossing bedenken.
De bedoeling is dat ik in een textbox een karakter kan intypen, dit op lettertype arial en grootte 8.

Nu als ik op een knop klik zou dit moeten omgevormd worden naar een 8*8 grid die het karakter omzet en de juist zwart/wit kleuren toont.

dus het karakater overlopen en de pixels van het ingetypte karakter overbrengen naar een grid waarbij iedere cel een kleur voorstelt (zwart of wit).

Ik kan via dit via een onpaint schrijven ( het ingetypte ), maar heb geen idee hoe ik de "pixels" kan overlopen? Ook heb ik dit in een image geschreven, maar dan nog is er blijkbaar geen mogelijkheid om dit te overlopen?

Hou zou ik dit best kunnen oplossen?

Alvast bedankt

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:52

TeeDee

CQB 241

Via GetPixel kan je een X,Y positie opgeven.

C#:
1
image.GetPixel(0,0); // returns a Color Value.


Vervolgens met een while oid kan je aan de slag in een grid van 8*8.

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
TeeDee schreef op donderdag 10 april 2008 @ 14:42:
Via GetPixel kan je een X,Y positie opgeven.

C#:
1
image.GetPixel(0,0); // returns a Color Value.


Vervolgens met een while oid kan je aan de slag in een grid van 8*8.
bedankt voor deze functie, zo kan ik inderdaad het kleur teweten komen. Maar ik krijg dit niet zwart-wit uit te lezen. Wat ik wil is het karakter die in het zwart-wit staat uitlezen, en dit dan overlopen.

Wat ik heb:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        internal void showChar(string p, Font font)
        {
            Bitmap b = new Bitmap(1,1);

            Graphics graphics = Graphics.FromImage(b);

            int width = (int)graphics.MeasureString(p, font).Width;
            int height = (int)graphics.MeasureString(p, font).Height;

            b = new Bitmap(width, height);

            graphics = Graphics.FromImage(b);
            graphics.Clear(Color.White);

            graphics.DrawString(p, f, new SolidBrush(Color.Black), 0, 0);
            graphics.Flush();

            Color kleur = b.GetPixel(0, 0);
            kleur = b.GetPixel(1, 1);
            kleur = b.GetPixel(8,8);
            kleur = b.GetPixel(3, 5);
            kleur = b.GetPixel(1, 3);
       }


als ik bijvoorbeeld 'A' intyp, dan wordt dit in een bitmap object gestoken, een graphics element gemaakt die dan de 'A' daarop zet. Maar het bitmap object is altijd 24bit, ik kan daar geen 1bpp van maken.

Bedankt

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Going for adventure, lots of sun and a convertible! | GMT-8


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:52

TeeDee

CQB 241

C#:
1
Bitmap b = new Bitmap(1,1,PixelFormat.[vul-in-welk-je-wil]);

Nu vraag ik me af: welke IDE gebruik je? Visual Studio geeft perfect de overloads weer.

* TeeDee vraagt zich ook af wat je hier mee wil bereiken. GetPixel geeft in het geval van een 1bpp een Black of White terug. En dan?

[ Voor 33% gewijzigd door TeeDee op 10-04-2008 17:10 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
TeeDee schreef op donderdag 10 april 2008 @ 17:03:
C#:
1
Bitmap b = new Bitmap(1,1,PixelFormat.[vul-in-welk-je-wil]);

Nu vraag ik me af: welke IDE gebruik je? Visual Studio geeft perfect de overloads weer.
Visual studio geeft inderdaad de overloads weer, en daar kun je inderdaad het pixelformat ingeven, dat heb ik ook gedaan ;)

MAAR

je kunt dan geen graphics object maken van een bitmap object met een pixelformat definitie :(

C#:
1
2
3
Bitmap b = new Bitmap(1,1,PixelFormat.Format1bppIndexed);

Graphics graphics = Graphics.FromImage(b);


werkt dus niet : Een Graphics-object kan niet worden gemaakt aan de hand van een afbeelding met een geïndexeerde pixelindeling.

Verwijderd

Topicstarter
TeeDee schreef op donderdag 10 april 2008 @ 17:03:
* TeeDee vraagt zich ook af wat je hier mee wil bereiken. GetPixel geeft in het geval van een 1bpp een Black of White terug. En dan?
die black en white wil ik gebruiken om in m'n grid weer te geven. ik wil dus exact weten waar de witte en zwarte pixels staan .. monochroom dus ..

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:52

TeeDee

CQB 241

En waarom geef je dat dan niet in je startpost weer? En wat zijn je verdere pogingen? En heb je de link van Snake bekeken?


C#:
1
2
Bitmap b = new Bitmap(1, 1, PixelFormat.Format1bppIndexed);
Graphics g = Graphics.FromImage(b);

Geeft bij mij welgeteld nul compiler errors. Krijg je runtime errors?

[ Voor 44% gewijzigd door TeeDee op 10-04-2008 17:30 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Flard
  • Registratie: Februari 2001
  • Laatst online: 18-11 21:14
Je kunt natuurlijk ook de kleur (zwart/wit) bepalen a.d.h.v. van de RGB waarden van de kleur (of, beter de HSB-waarden) op basis van een eigen threshold. (tip)

Verwijderd

Misschien een domme vraag want ik snap het doel hiervan niet, maar kun je niet gewoon de tekst van die TextBox uitlezen en daar een bitmap bij maken?

Sowieso zijn letters vaak niet zwart/wit. Dingen als anti-aliasing (ClearType) maken prachtige gekleurde pixels die je niet ziet als kleuren.

Verwijderd

Topicstarter
TeeDee schreef op donderdag 10 april 2008 @ 17:14:
En waarom geef je dat dan niet in je startpost weer? En wat zijn je verdere pogingen? En heb je de link van Snake bekeken?


C#:
1
2
Bitmap b = new Bitmap(1, 1, PixelFormat.Format1bppIndexed);
Graphics g = Graphics.FromImage(b);

Geeft bij mij welgeteld nul compiler errors. Krijg je runtime errors?
Er zijn inderdaad geen compiler errors, maarwel runtime errors.

De link van Snake heb ik bekeken, maar dit hielp me niet echt verder.
Ik zou dus moeten een monochrome bitmap bekomen van de karakter die ik heb ingetypt.
Verwijderd schreef op donderdag 10 april 2008 @ 20:36:
Misschien een domme vraag want ik snap het doel hiervan niet, maar kun je niet gewoon de tekst van die TextBox uitlezen en daar een bitmap bij maken?

Sowieso zijn letters vaak niet zwart/wit. Dingen als anti-aliasing (ClearType) maken prachtige gekleurde pixels die je niet ziet als kleuren.
Dit doe ik ook, maar die anti-aliasing maakt er zoals je zegt geen zwart/wit van. Bestaat er een mogelijkheid om 'monochrome' te schrijven. Of moet dit ik gewoon schrijven, en dan bitmap om te zetten via een bitbld functie naar monochrome.

Dit lijkt mij een omweg als het eenvoudiger zou kunnen, maar als het niet anders kan natuurlijk :)

[ Voor 36% gewijzigd door Verwijderd op 11-04-2008 08:44 ]


  • RobLemmens
  • Registratie: Juni 2003
  • Laatst online: 09:29
Zo draw je een char zonder antialiasing naar een bitmap:

C#:
1
2
3
4
Bitmap bmp = new Bitmap(100,100); 
Graphics gfx = Graphics.FromImage(bmp);
gfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
gfx.DrawString("A", new Font("Arial", 8), Brushes.Black, new PointF(50, 50));


Is wel niet 1bit, gfx ondersteund dat niet. Een 1bpp bitmap heeft meestal een 1 voor een zwart pixel, een 24/32 bpp bitmap heeft 0 als zwart. De code zou ongeveer zoiets worden:

code:
1
if pixel[x,y].(r+g+b) = 0 then newpixel[x,y] = 1 else newpixel[x,y] = 0

Verwijderd

Topicstarter
RobLemmens schreef op vrijdag 11 april 2008 @ 11:40:
Zo draw je een char zonder antialiasing naar een bitmap:

C#:
1
2
3
4
Bitmap bmp = new Bitmap(100,100); 
Graphics gfx = Graphics.FromImage(bmp);
gfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
gfx.DrawString("A", new Font("Arial", 8), Brushes.Black, new PointF(50, 50));


Is wel niet 1bit, gfx ondersteund dat niet. Een 1bpp bitmap heeft meestal een 1 voor een zwart pixel, een 24/32 bpp bitmap heeft 0 als zwart. De code zou ongeveer zoiets worden:

code:
1
if pixel[x,y].(r+g+b) = 0 then newpixel[x,y] = 1 else newpixel[x,y] = 0
Bedankt voor deze informatie ;)

Met al deze gegevens weet ik genoeg, en is het me gelukt om een bitmap te maken van een getypt karakter.

Bedankt allemaal!!
Pagina: 1