반응형
C # 비트 맵에 텍스트 쓰기
다음과 같은 문제가 있습니다. 일부 그래픽을 C # Windows 형식으로 만들고 싶습니다. 내 프로그램에 비트 맵을 읽고이 비트 맵에 텍스트를 쓰고 싶습니다. 결국이 그림이 pictureBox에로드되기를 원합니다. 그리고 그것은 내 질문입니다. 어떻게하니?
예, 어떻게 작동해야합니까?
Bitmap a = new Bitmap(@"path\picture.bmp");
a.makeTransparent();
// ? a.writeText("some text", positionX, positionY);
pictuteBox1.Image = a;
할 수 있습니까?
Bitmap bmp = new Bitmap("filename.bmp");
RectangleF rectf = new RectangleF(70, 90, 90, 50);
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.DrawString("yourText", new Font("Tahoma",8), Brushes.Black, rectf);
g.Flush();
image.Image=bmp;
아주 오래된 질문이지만 오늘 앱을 위해 이것을 빌드해야했고 다른 답변에 표시된 설정이 깨끗한 이미지를 생성하지 않는다는 것을 발견했습니다 (나중의 .Net 버전에서 새 옵션이 추가되었을 수 있음).
비트 맵의 중앙에 텍스트를 원한다고 가정하면 다음과 같이 할 수 있습니다.
// Load the original image
Bitmap bmp = new Bitmap("filename.bmp");
// Create a rectangle for the entire bitmap
RectangleF rectf = new RectangleF(0, 0, bmp.Width, bmp.Height);
// Create graphic object that will draw onto the bitmap
Graphics g = Graphics.FromImage(bmp);
// ------------------------------------------
// Ensure the best possible quality rendering
// ------------------------------------------
// The smoothing mode specifies whether lines, curves, and the edges of filled areas use smoothing (also called antialiasing).
// One exception is that path gradient brushes do not obey the smoothing mode.
// Areas filled using a PathGradientBrush are rendered the same way (aliased) regardless of the SmoothingMode property.
g.SmoothingMode = SmoothingMode.AntiAlias;
// The interpolation mode determines how intermediate values between two endpoints are calculated.
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
// Use this property to specify either higher quality, slower rendering, or lower quality, faster rendering of the contents of this Graphics object.
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
// This one is important
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
// Create string formatting options (used for alignment)
StringFormat format = new StringFormat()
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
// Draw the text onto the image
g.DrawString("yourText", new Font("Tahoma",8), Brushes.Black, rectf, format);
// Flush all graphics changes to the bitmap
g.Flush();
// Now save or use the bitmap
image.Image = bmp;
참고 문헌
- https://msdn.microsoft.com/en-us/library/system.drawing.graphics.smoothingmode(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.interpolationmode(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/system.drawing.graphics.pixeloffsetmode(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/system.drawing.graphics.textrenderinghint(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/system.drawing.stringformat(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/21kdfbzs(v=vs.110).aspx
You need to use the Graphics
class in order to write on the bitmap.
Specifically, one of the DrawString
methods.
Bitmap a = new Bitmap(@"path\picture.bmp");
using(Graphics g = Graphics.FromImage(a))
{
g.DrawString(....); // requires font, brush etc
}
pictuteBox1.Image = a;
var bmp = new Bitmap(@"path\picture.bmp");
using( Graphics g = Graphics.FromImage( bmp ) )
{
g.DrawString( ... );
}
picturebox1.Image = bmp;
If you want wrap your text, then you should draw your text in a rectangle:
RectangleF rectF1 = new RectangleF(30, 10, 100, 122);
e.Graphics.DrawString(text1, font1, Brushes.Blue, rectF1);
See: https://msdn.microsoft.com/en-us/library/baw6k39s(v=vs.110).aspx
참고URL : https://stackoverflow.com/questions/6311545/c-sharp-write-text-on-bitmap
반응형
'UFO ET IT' 카테고리의 다른 글
코드에 주석을 달지 않고 어떻게 vim으로 붙여 넣습니까? (0) | 2020.11.09 |
---|---|
postgres에서 중복 배열 값 제거 (0) | 2020.11.09 |
지원 벡터의 수와 훈련 데이터 및 분류기 성능 간의 관계는 무엇입니까? (0) | 2020.11.09 |
Facebook 좋아요 상자를 반응 형으로 만드는 방법은 무엇입니까? (0) | 2020.11.09 |
쿼리 결과에 대한 T-SQL 루프 (0) | 2020.11.09 |