Мне удалось получить x,y,height,width
области, которую мне нужно обрезать, из рисунка на inkCanvas. но я не могу найти правильное решение, чтобы обрезать эту область и сохранить ее как изображение.
Редактировать: вот вся история: год назад я разработал приложение для рисования для Windows Phone 8.1 Silverlight. используя этот пример
http://bsubramanyamraju.blogspot.com/2014/03/windows-phone-ink-supportsignature.html
Теперь я пытаюсь сделать то же самое с некоторыми другими функциями для универсальной вдовы. Я разрабатываю его с нуля, потому что теперь рукописный ввод доступен в win10, плюс я не могу использовать старый код, так как он содержит InkPresenter, который доступен только для приложений Silverlight.
Вот код, который я использовал для обрезки области в прошлый раз (это не мой собственный код, я нашел его в Интернете)
static WriteableBitmap CropImage(WriteableBitmap source,
int xOffset, int yOffset,
int width, int height)
{
// Get the width of the source image
var sourceWidth = source.PixelWidth;
// Get the resultant image as WriteableBitmap with specified size
var result = new WriteableBitmap(width, height);
// Create the array of bytes
for (var x = 0; x <= height - 1; x++)
{
var sourceIndex = xOffset + (yOffset + x) * sourceWidth;
var destinationIndex = x * width;
Array.Copy(source.Pixels, sourceIndex, result.Pixels, destinationIndex, width);
}
return result;
}
Но теперь он говорит
'WriteableBitmap' does not contain a definition for 'Pixels'
на source.Pixels
и source.Pixels
и я не знаю, как это исправить.
Я разместил этот вопрос, надеясь, что должен быть прямой способ обрезать область InkCanvas, поскольку теперь она является частью win10.
Редактировать 2 @Jay ширина и высота, которые я передаю в параметрах, — это ширина и высота области, которую я хочу обрезать, относительно x и y. Я попытался отладить, чтобы проверить значение decoder.PixelWidth
и height
. это всегда то же самое, что и ширина и высота, которые я указываю в параметрах.
так что теперь, если xoffset =185
и yoffset=100
и height
и width
в параметрах будут 50
и 60
. decoder.PixelWidth
и decoder.PixelHeight
также будут такими же, как параметры. так выглядит условие if
if (pixelWidth > decoder.PixelWidth - xOffset || pixelHeight > decoder.PixelHeight - yOffset)
if (60> 60 - 185 || 50> 50- 100)
if (60> -125 || 50> -50)
поэтому это условие всегда истинно. где я ошибаюсь?
надеюсь, я не сделал никаких опечаток в этом редактировании.