Как отобразить строку на изображении в Windows Phone Mango?

Я пытаюсь отобразить строку над изображением, выбранным пользователем с помощью задачи 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();

        }
    }

Однако код не работает. Скорее всего, я делаю большую ошибку. Любая помощь приветствуется, спасибо!


person Rahul Mathur    schedule 11.10.2011    source источник
comment
не работает, довольно расплывчато. Ваши шансы получить ответ на ваш вопрос значительно возрастут, если вы опишете, что на самом деле происходит, когда вы запускаете этот код.   -  person MusiGenesis    schedule 11.10.2011
comment
не работает = текст не отображается на изображении. Вот и все.   -  person Rahul Mathur    schedule 11.10.2011


Ответы (2)


Согласно документация:

Если указано пустое преобразование [т.е. null, которое вы передаете в качестве второго параметра], биты, представляющие элемент, отображаются с тем же смещением, как если бы они были помещены в родительский элемент.

Итак, если я правильно понимаю, что происходит (а я, вероятно, не понимаю), ваш элемент textBlock1 отображается с тем же смещением, что и в вашей родительской форме. Таким образом, может случиться так, что textBlock1 находится так далеко от верха и слева, что не отображается в вашем записываемом растровом изображении.

Кстати, я не знаком с WriteableBitmap, но то, что вы делаете (помещаете текст в элемент пользовательского интерфейса, а затем визуализируете этот элемент в растровое изображение), кажется странным способом добавления текста в растровое изображение.

person MusiGenesis    schedule 11.10.2011
comment
Так как вы предлагаете мне это исправить? Как получить текущее смещение и как преобразовать его в правильное смещение? - person Rahul Mathur; 13.10.2011
comment
smartypantscoding.com/content/ - person MusiGenesis; 13.10.2011
comment
Я думаю, вам просто нужно сделать это: bitmap.Render(textBlock1 , new TranslateTransform()); - person MusiGenesis; 13.10.2011
comment
замена null на new TranslateTransform() ничего не сделала - я видел сообщение, на которое вы ссылались - мне интересно, как он получил необходимые координаты - эта часть меня озадачивает. - person Rahul Mathur; 13.10.2011

Я только что понял это. Я подумал, что должен опубликовать код решения здесь, может быть, кому-нибудь поможет - когда-нибудь :)

//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();
person Rahul Mathur    schedule 17.10.2011