2013-06-10 2 views
0

У меня такой код для обертки Bitmap. Мне нужно создать конструктор перегрузки, который вырезает некоторый прямоугольник из исходного изображения и помещает его в _wbmp.Silverlight: Как скопировать регион из WriteableBitmap/BitmapImage?

Smth похоже на общедоступный Bitmap (строка fileName, область Rectangle). Пожалуйста, поделитесь некоторым решением.

public Bitmap(string fileName) 
    { 
     Uri uri = new Uri(fileName, UriKind.RelativeOrAbsolute); 

     StreamResourceInfo sri = null; 
     sri = Application.GetResourceStream(uri); 

     // Create a new WriteableBitmap object and set it to the JPEG stream. 
     BitmapImage bitmap = new BitmapImage(); 
     bitmap.CreateOptions = BitmapCreateOptions.None; 
     bitmap.SetSource(sri.Stream); 
     _wbmp = new WriteableBitmap(bitmap); 
    } 

Спасибо

ответ

1

Объект WritableBitmap имеет метод визуализации, который можно использовать, чтобы сделать новое растровое изображение после добавления некоторого преобразования. В вашем случае вы можете создать и новый WritableBitmap с правильным новым размером, чтобы установить правый угол кнопки, а затем добавить временный образ с вашим источником и перевести его влево, чтобы установить верхний левый угол. Что-то вроде этого:

public static WriteableBitmap CropBitmap(string fileName, int newTop, int newRight, int newBottom, int newLeft) 
    { 
     Uri uri = new Uri(fileName, UriKind.RelativeOrAbsolute); 

     StreamResourceInfo sri = null; 
     sri = Application.GetResourceStream(uri); 

     // Create a new WriteableBitmap object and set it to the JPEG stream. 
     BitmapImage bitmapImage = new BitmapImage(); 
     bitmapImage.CreateOptions = BitmapCreateOptions.None; 
     bitmapImage.SetSource(sri.Stream); 

     //calculate bounding box 
     int originalWidth = bitmapImage.PixelWidth; 
     int originalHeight = bitmapImage.PixelHeight; 

     int newSmallWidth = newRight - newLeft; 
     int newSmallHeight = newBottom - newTop; 

     //generate temporary control to render image 
     Image temporaryImage = new Image { Source = bitmapImage, Width = originalWidth, Height = originalHeight }; 

     //create writeablebitmap 
     WriteableBitmap wb = new WriteableBitmap(newSmallWidth, newSmallHeight); 


     wb.Render(temporaryImage, new TranslateTransform { X = -newLeft, Y = -newTop }); 
     wb.Invalidate(); 

     return wb; 
    } 
Смежные вопросы