#windows-phone-7.1 #windows-phone-7
#windows-phone-7.1 #windows-phone-7
Вопрос:
Я пытаюсь отобразить строку поверх изображения, выбранного пользователем, с помощью задачи Photochooser. Я видел различные ответы на подобный вопрос, но ни один из ответов не привел к этому.
Это то, что я придумал —
void photochoosertask_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
System.Windows.Media.Imaging.BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage();
bmp.SetSource(e.ChosenPhoto);
image1.Source = bmp;
string steamer = "SO!";
System.Windows.Media.Imaging.WriteableBitmap bmps = new System.Windows.Media.Imaging.WriteableBitmap(bmp);
RenderString(bmps, steamer);
}
}
private void RenderString(System.Windows.Media.Imaging.WriteableBitmap bitmap, string steamer)
{
textBlock1.Text = steamer;
bitmap.Render(textBlock1 , null);
bitmap.Invalidate();
}
}
Однако код не работает. Скорее всего, я совершаю серьезную ошибку. Любая помощь приветствуется, спасибо!
Комментарии:
1. «не работает» довольно расплывчато. Ваши шансы получить ответ на ваш вопрос значительно возрастут, если описать, что на самом деле происходит при запуске этого кода.
2. не работает = текст не отображается НА изображении. Вот и все.
Ответ №1:
Согласно документации:
Если задано пустое преобразование [т.Е.
null
То, Что вы передаете в качестве второго параметра], биты, представляющие элемент, отображаются с тем же смещением, как если бы они были помещены в их родительский элемент.
Итак, если я правильно понимаю, что происходит (а я, вероятно, нет), ваш textBlock1
элемент отображается с тем же смещением, что и в вашей родительской форме. Так что, возможно, textBlock1 находится так далеко сверху и слева, что он не отображается в вашем растровом изображении, доступном для записи.
Кстати, я не знаком с WriteableBitmap
, но то, что вы делаете (ввод текста в элемент пользовательского интерфейса, а затем рендеринг этого элемента на вашем растровом изображении), кажется странным способом добавления текста в растровое изображение.
Комментарии:
1. Итак, как вы предлагаете это исправить? Как мне получить текущее смещение и как мне отобразить его с правильным смещением?
2. smartypantscoding.com/content/…
3. Я думаю, вам просто нужно это сделать:
bitmap.Render(textBlock1 , new TranslateTransform());
4. замена «null» на «new TranslateTransform ()» ничего не дала — я видел сообщение, на которое вы ссылались — мне интересно, как он получил необходимые координаты — эта часть меня озадачивает.
Ответ №2:
Я только что понял это. Подумал, что я должен опубликовать код решения здесь, может помочь кому-нибудь — когда-нибудь 🙂
//setup a writeable bitmap with required dimensions
System.Windows.Media.Imaging.WriteableBitmap wbmps = new System.Windows.Media.Imaging.WriteableBitmap(x,y);
//set up a transform, we'll use ScaleTransform and we'll keep things simple here, 1x on both the axis
ScaleTransform transform = new System.Windows.Media.ScaleTransform();
transform.ScaleX=1;
transform.ScaleY=1;
//now we need to render the image on the writeablebitmap and follow it up by rendering a //string
wbmps.Render(imageelement,transform);
//Now render the string which is equivalent to TextBlock.Text
wbmps.Render(texblock,transform);
//Finally - redraw the writeablebitmap to complete the rendering
wbmps.Invalidate();