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

#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();