Странное поведение DrawString - PullRequest
1 голос
/ 31 января 2012

Я рисую строку с g.DrawString на изображении.Прежде чем сделать это, я также рисую изображения на исходном изображении.

Вот как выглядит мой код:

Bitmap sourceBitmap = Image.FromFile(myBitmap) as Bitmap;
Graphics g = Graphics.FromImage(sourceBitmap);

// drawing some other images on sourceBitmap with g.DrawImage

int positionx = 100;
Font ftemp = cvt.ConvertFromString(myfont) as Font; // predefined font
SizeF mysize = TextRenderer.MeasureText(mytext, ftemp); 
PointF myposition = new PointF(positionx - mysize.Width, positiony) // align right
g.DrawString(mytext, ftemp, new SolidBrush(mycolor), myposition);

Вот что я получаю: enter image description here

Если я теперь добавлю эти две строки перед уже упомянутым кодом, как это:

Bitmap sourceBitmap = Image.FromFile(myBitmap) as Bitmap;
Graphics g = Graphics.FromImage(sourceBitmap);

// drawing some other images on sourceBitmap with g.DrawImage

sourceBitmap = new Bitmap(sourceBitmap); // sourceBitmap is the bitmap (png) I'm drawing on from the very beginning.
g = Graphics.FromImage((Image)sourceBitmap);

int positionx = 100;
Font ftemp = cvt.ConvertFromString(myfont) as Font; // predefined font
SizeF mysize = TextRenderer.MeasureText(mytext, ftemp); 
PointF myposition = new PointF(positionx - mysize.Width, positiony) // align right
g.DrawString(mytext, ftemp, new SolidBrush(mycolor), myposition);

Я получу это: enter image description here

Я ничего не изменил, кроме этих двухлиний.Поэтому мой вопрос: как это происходит?

1 Ответ

1 голос
/ 31 января 2012

Проверьте DPI исходного PNG. Когда вы загружаете растровое изображение из файла, он загружает DPI, записанный в файл. Когда вы создаете новый Bitmap на основе другого Bitmap, который уже находится в памяти, он сбрасывает его на экран DPI. Он не переносит исходную настройку DPI.

Вы можете указать, что ваш шрифт будет представлен с GraphicsUnit.Pixel следующим образом:

Font f = new Font("Arial", 10.0f, GraphicsUnit.Pixel);

В противном случае ваш шрифт будет масштабироваться с разрешением изображения. DPI изображения просто используется, чтобы определить, насколько большими в реальных единицах (дюймах) должно быть изображение. Вы можете или не можете использовать эту информацию при масштабировании текста, в зависимости от того, масштабируете ли вы ее для печати. ​​

...