Всем привет! Думаю многих из вас интересовало как же происходит установка чужих программ, как они помещают свои программы в параметры Windows для установки и удаления программ? Напишем собственный установщик программы и Uninstall. Скажу сразу, да есть обертки которые все это позволяют автоматизировать, так же имеется встроенный инсталлятор в самой VS. Однако, когда вам не обходимо […]
Как преобразовать BitmapImage из Bitmap и обратно?
Всем привет, покажу не сколько примеров того как можно привести тип Bitmap к BitmapImage и на оборот. Преобразовать из BitmapImage в Bitmap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
private Bitmap FromBitmapImagetoBitmap(BitmapImage bitmapImage) { // BitmapImage bitmapImage = new BitmapImage(new Uri("../Images/test.png", UriKind.Relative)); using(MemoryStream outStream = new MemoryStream()) { BitmapEncoder enc = new BmpBitmapEncoder(); enc.Frames.Add(BitmapFrame.Create(bitmapImage)); enc.Save(outStream); System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(outStream); return new Bitmap(bitmap); } } |
Преобразовать из Bitmap в BitmapImage
1 2 3 4 5 6 7 8 9 |
private BitmapImage BitmapToBitmapImage(Bitmap bitmap) { BitmapSource i = Imaging.CreateBitmapSourceFromHBitmap( bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); return (BitmapImage)i; } |
Альтернативный вариант
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[System.Runtime.InteropServices.DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); private BitmapImage BitmapToBitmapImage(Bitmap bitmap) { IntPtr hBitmap = bitmap.GetHbitmap(); BitmapImage retval; try { retval = (BitmapImage)Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); } finally { DeleteObject(hBitmap); } return retval; } |
Альтернативный вариант
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public static BitmapImage BitmapToBitmapImage(this Bitmap bitmap) { using (var memory = new MemoryStream()) { bitmap.Save(memory, ImageFormat.Png); memory.Position = 0; var bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = memory; bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit(); bitmapImage.Freeze(); return bitmapImage; } } |
Как разрезать изображение на части C#
Всем привет. Возможно кому-нибудь поможет мое решение, как можно из jpeg файла разрезать на равный части все изображение и сохранить их.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
public partial class Form1 : Form { public Form1() { InitializeComponent(); } // Разделите файл. private void btnGo_Click(object sender, EventArgs e) { // Ожидаем ввод данных о размераз, на которые будем разрезать изображение int wid = int.Parse(txtWidth.Text); int hgt = int.Parse(txtHeight.Text); Bitmap bm = LoadUnlocked(txtFile.Text); // Начните разбивать растровое изображение. string piece_name = Path.GetFileNameWithoutExtension(txtFile.Text); Bitmap piece = new Bitmap(wid, hgt); Rectangle dest_rect = new Rectangle(0, 0, wid, hgt); using (Graphics gr = Graphics.FromImage(piece)) { int num_rows = bm.Height / hgt; int num_cols = bm.Width / wid; Rectangle source_rect = new Rectangle(0, 0, wid, hgt); for (int row = 0; row < num_rows; row++) { source_rect.X = 0; for (int col = 0; col < num_cols; col++) { // Скопируйте кусок изображения. gr.DrawImage(bm, dest_rect, source_rect, GraphicsUnit.Pixel); // Сохраним вырезаную часть изображения. string filename = piece_name + row.ToString("00") + col.ToString("00") + ".jpg"; piece.Save(filename, ImageFormat.Jpeg); // Переходим к следующему столбцу. source_rect.X += wid; } source_rect.Y += hgt; } MessageBox.Show("Создаем " + num_rows * num_cols + " фаил", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information); } } // Загружаем растровое изображение, не блокируя сам файл. private Bitmap LoadUnlocked(string file_name) { using (Bitmap bm = new Bitmap(file_name)) { return new Bitmap(bm); } } } |
Задаем входные параметры размеры на которые будем разрезать и путь к нашему изображению. В итоге на выходе в зависимости от параметров и размера изображения мы получим множество частей.
Как удалить фаил занятый другим процессом?
Всем привет! Я думаю многие из вас сталкивались с такой проблемой, при удалении или перемещении файла, система грозно уведомляла нас о том что: Не удается удалить фаил. Объект используется другим пользователем или программой. Закройте все программы, которые могут использовать этот фаил и повторите попытку. Другим вариантом ошибки может быть: Операция не может быть завершена, поскольку […]
Как изменить цвет фона Background C# WPF
Всем привет! Сегодня я покажу как можно изменить цвет фона контрола со свойством Background в WPF. Продемонстрирую два примера. Изменения цвета фона RGB
1 |
btn1.Background = new SolidColorBrush(Color.FromRgb(255,255,255)); |
Изменения цвета фона Hex
1 |
btn1.Background = (SolidColorBrush)new BrushConverter().ConvertFromString("#3CACDC"); |
Таким образом мы изменили цвет фона кнопки двумя способами.