Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Elderos, Вы писали:
E>>Если я правильно думаю, что jgpEncoder — это кодировщик в Jpeg, то вам сюда А>Не помогло, png тоже самое.
Здравствуйте, Legion13, Вы писали:
L>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Legion13, Вы писали:
L>>>А если интерполяцию отключить? А>>А как его отключить не подскажите?
L>Попробуйте закомментарить вот этот код: L>
Здесь так не прокатит. Информация о том как сглаживать (и вообще, как рисовать) векторное изображение находится в самом metafile'е, настройки myGraphics на качество отрисовки никак не влияют никак не влияют.
Пример:
private static Metafile CreateNewMetafile()
{
Metafile result;
using (Bitmap b = new Bitmap(1, 1))
using (Graphics g = Graphics.FromImage(b))
using (MemoryStream ms = new MemoryStream())
{
IntPtr ipHdc = g.GetHdc();
result = new Metafile(ms, ipHdc, EmfType.EmfPlusOnly);
g.ReleaseHdc(ipHdc);
}
return result;
}
private static Metafile TestGraphic(bool smoothing)
{
var result = CreateNewMetafile();
using (Graphics graphics = Graphics.FromImage(result))
{
graphics.SmoothingMode = smoothing ? SmoothingMode.HighQuality : SmoothingMode.None;
//осиusing (Pen pen = new Pen(Color.Black, 2))
{
graphics.DrawLine(pen, new Point(0, 1000), new Point(0, 0));
graphics.DrawLine(pen, new Point(0, 1000), new Point(1000, 1000));
}
//типо график
graphics.DrawLine(Pens.Black, new Point(0, 700), new Point(400, 700));
graphics.DrawArc(Pens.Black, new Rectangle(new Point(300, 500), new Size(200, 200)), 0, 90);
graphics.DrawArc(Pens.Black, new Rectangle(new Point(500, 500), new Size(200, 200)), 180, 180);
graphics.DrawLine(Pens.Black, new Point(700, 600), new Point(1000, 1000));
}
return result;
}
private static void DrawPng(Metafile meta, int width, int height)
{
using (Bitmap bmp = new Bitmap(width, height))
using (Graphics graphics = Graphics.FromImage(bmp))
{
Rectangle rcSrc = new Rectangle(0, 0, meta.Width, meta.Height);
Rectangle rcDest = new Rectangle(0, 0, bmp.Width, bmp.Height);
graphics.SmoothingMode = SmoothingMode.None;
graphics.InterpolationMode = InterpolationMode.Low;
graphics.DrawImage(meta, rcDest, rcSrc, GraphicsUnit.Pixel);
bmp.Save(@"C:\png.png");
}
}
[STAThread]
public static void Main(string[] args)
{
using (var meta = TestGraphic(true))
{
meta.Save(@"C:\meta.wmf");
DrawPng(meta, 10000, 10000);
}
}
Я не до конца понял из вашего сообщения, если вы пишете следующий код, то получаете разные изображения? png — жирный?
using (MemoryStream ms = new MemoryStream(data))
{
Metafile metafile1 = new Metafile(ms);
metafile1.Save(@"C:\01.wmf");
using (Bitmap bmp = new Bitmap(metafile1.Width, metafile1.Height))
using (Graphics graphics = Graphics.FromImage(bmp))
{
Rectangle rect = new Rectangle(Point.Empty, metafile1.Size);
graphics.DrawImage(metafile1, rect, rect, GraphicsUnit.Pixel);
bmp.Save(@"C:\02.png");
}
}
Re[5]: Конвертация метафайла в bmp
От:
Аноним
Дата:
02.11.11 08:58
Оценка:
Здравствуйте, Wise_PingWin
Проблемы с искажением происходят, когда меняешь разрешение:
width и height — примерно 1/3 от meta.Width, meta.Height
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Wise_PingWin А>Проблемы с искажением происходят, когда меняешь разрешение:
А>width и height — примерно 1/3 от meta.Width, meta.Height
А>
А>и все текст уже поплыл. А>Может проблема в emf, они экспортируются из Excell и хранятся в БД?
За качество текста отвечает свойство graphics.TextRenderingHint, но менять его надо при рисовании вектора. Если при экспорте из Excel вам доступны какие-то подобные настройки, то поищите что-то подобное там.
Если нет, то скорее всего используется значение по умолчанию : TextRenderingHint.SystemDefault. Я видел разные начертания текста по умолчанию в разных версиях Windows (в русской всегда убогий шрифт), так что может быть его можно поменять, только я не знаю где . Это не решит проблему с уже экспортированными графиками, но новые будут с читаемым текстом.
Если не выйдет, то придется извращаться. Например, нарисовать векторный образ на растровом такого же размера, а потом уже его нарисовать на уменьшенном. Но это как-то некрасиво совсем. Может еще стоит посмотреть на graphics.ScaleTransform(dx, dy)