mercoledì 16 ottobre 2013

Concatenare immagini Bitmap C#

Ecco un esempio di codice per concatenare tra loro 2 o più immagini:


Code:
//Concatenate Image in Horizontal
private Bitmap ConcatenateImage(IList<Bitmap> ListImage)
{
 int ImWidth = 0;

 for (int i = 0; i < ListImage.Count(); i++)
 {
  ImWidth = ImWidth + ListImage[i].Width;
 }

 Bitmap bmpfinal = new Bitmap(ImWidth, ListImage[0].Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

 Graphics gr = Graphics.FromImage(bmpfinal);

 gr.DrawImage(ListImage[0], new System.DrawingPoint(0, 0));
 for (int i = 1; i < ListImage.Count(); i++)
 {
  gr.DrawImage(ListImage[i], new System.DrawingPoint(ListImage[i - 1].Width, 0));
 }

 gr.Dispose();
 
 return bmpfinal;
}<!--[if IE]>

Convertire immagini Bitmap in ImageSource

Il seguente codice converte un immagine in formato Bitmap in formato ImageSource:



Code:
//Convert Bitmap to ImageSource
public ImageSource ToImageSource(System.DrawingBitmap source)
{
 BitmapSource bitSrc = null;

 var hBitmap = source.GetHbitmap();

 try
 {
  bitSrc = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
   hBitmap,
   IntPtr.Zero,
   Int32Rect.Empty,
   BitmapSizeOptions.FromEmptyOptions());
 }
 catch
 {
  bitSrc = null;
 }
 finally
 {
  NativeMethods.DeleteObject(hBitmap);
 }

 return bitSrc;
}

//Class Utility
internal static class NativeMethods
{
 [DllImport("gdi32.dll")]
 [return: MarshalAs(UnmanagedType.Bool)]
 internal static extern bool DeleteObject(IntPtr hObject);
}

Cosa molto importante è la cancellazione dell'oggetto tramite la classe "NativeMethods" altrimenti potreste avere problemi di memoria.

martedì 8 ottobre 2013

Convertire codice C# per inserimento in blog

Ciao a tutti, ho trovato un ottimo sito internet che copiando il frammento di codice c# da inserire in un blog te lo trasforma in codice HTML da inserire facilmente in un blog.

Il sito internet è: http://formatmycsharpcode.blogspot.it/

Aggiornamento interfaccia grafica C# da thread secondario

Aggiornamento interfaccia grafica Windows form da un thread secondario:


Code:
void ThreadSecondario(object sender, EventArgs e)
{
 if (this.InvokeRequired)
 {
  Invoke(new MethodInvoker(delegate() { ThreadSecondario(sender, e); }));
 }
 else
 {
  AggiornaValori(sender);
 }
}

void AggiornaValori(object sender)
{
 //Aggiornamento valori form
}

Aggiornamento interfaccia grafica WPF da un thread secondario:


Code:
using System.Windows.Threading;

private delegate void AggiornaValoriDelegate(object sender);
void ThreadSecondario(object sender, EventArgs e)
{
 Dispatcher.BeginInvoke(DispatcherPriority.Normal, new AggiornaValoriDelegate(AggiornaValori), sender);
}
void AggiornaValori(object sender)
{
 //Aggiornamento valori controlli WPF
}