2012-03-12 67 views
3

我是WP7開發新手,我想知道如何將文字寫入圖像?在WP7中的圖像上寫文字

首先是否可以這樣做?

如GDI,如下圖所示,我們可以寫文字圖片:

Dim pth As New GraphicsPath() 
pth.AddString(txtSample.Text, New FontFamily(DropFont.SelectedValue), 0, Integer.Parse(DropFontSize.SelectedValue), New Point(left, top), StringFormat.GenericTypographic) 

但在WP7,我才知道,GDI不supported.So我怎樣才能做到這一點?

編輯:

我需要從pictures hub選擇一個圖像或使用camera拍照,並在圖像控件中顯示它,寫一些文字,並保存背部採用了不同的名稱。

任何建議是最受歡迎的。

+0

您是否試圖用文本疊加圖像,或將文本寫入圖像並保存(即創建一個存儲到設備的新Jpeg等) – 2012-03-12 20:55:25

+0

@ willmel-not overlaying我需要寫文本。 – coder 2012-03-12 20:56:03

+0

http://stackoverflow.com/questions/7481436/drawstring-on-wp7 – 2012-03-12 20:57:11

回答

4

您需要掌握WriteableBitmap,然後才能對其進行操作。

這可以通過使用Render方法添加UIElement來完成,也可以使用Pixels數組直接操作像素。

你可能只需要TextBlock元素添加到該位圖,但如果你是好奇像素處理這裏是如何做到這一點:

我只有用像素的操控體驗。這並不是完全直截了當,但您可以通過翻譯y * width + x訪問一維數組中的像素(x, y)

該值的格式爲argb32,即alpha通道(不透明度),紅色,綠色和藍色的值。定期Color和ARGB32以下之間轉換:

int ColorToInt(Color c) 
    { 
     var argb32 = c.A << 24 | c.R << 16 | c.G << 8 | c.B; 
     return argb32; 
    } 

    Color IntToColor(int argb32) 
    { 
     const int mask = 0x000000FF; 
     byte a, r, g, b; 
     a = (byte)((argb32 >> 24) & mask); 
     r = (byte)((argb32 >> 16) & mask); 
     g = (byte)((argb32 >> 8) & mask); 
     b = (byte)(argb32 & mask); 
     return Color.FromArgb(a, r, g, b); 
    } 
2

爲什麼你需要它們嵌入圖像?

你可以簡單地將您的圖像和文本中網格如:

<grid> 
    <image source="YourImageSource"/> 
    <TextBlock Text="Your Text Here"/> 
</grid> 

這將覆蓋使用文本圖像,而無需修改圖像,以便以後可以使用它。它還爲綁定等提供了更多的自由,因爲您可以將它們綁定到不同的事物上並獨立地切換它們。

如果您使用的是XNA,也可以通過像faester所說的那樣操作Texture2D的Pixels來完成。

+0

@ Runewake2-我以前見過這個答案,但這是一個壞主意,因爲我不想只顯示文本,我需要做一些操縱諸如改變文本的位置。然後網格劑量符合我的目的。 – coder 2012-03-13 08:38:53

+0

@DotNetter如果您需要更改文本的位置,可以通過將TextBlock的邊距設置爲您想要的偏移量(將相對於網格的位置)來完成此操作。這應該給你完全的文本自由。 另外,如果你想移動文本,那麼你不想使用嵌入文本在圖像中的另一種想法,因爲重新生成圖像很慢...非常慢。 – Runewake2 2012-03-14 01:11:28

+0

+1爲簡單起見。 – Robaticus 2012-03-14 12:48:56