Skip to main content

Some image operations in C#.NET

Flip Image

Using the Image.RotateFlip method, we can rotate the image by 90/180/270-degrees or flip the image horizontally or vertically.
The parameter of RotateFlip is System.Drawing.RotateFlipType, which specifies the type of rotation and flip to apply to the image.
Code Snippet:


//Specifies a 180-degree rotation without flipping
pictureBox1.Image.RotateFlip(RotateFlipType.Rotate180FlipNone);

//Specifies no rotation followed by a horizontal flip
pictureBox1.Image.RotateFlip(RotateFlipType.RotateNoneFlipX);

//Specifies a 90-degree rotation followed by a horizontal and vertical flip pictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipXY);


Join Two Images


Bitmap bitmap = new Bitmap(image1.Width + image2.Width, Math.Max(image1.Height, image2.Height));

    using (Graphics g = Graphics.FromImage(bitmap))

    {

        g.DrawImage(image1, 0, 0);

        g.DrawImage(image2, image1.Width, 0);

    }



Convert Bitmap to byte[] and vice-versa using C#

Here is the function to convert bitmap to byte[] in C# using ImageConverter class. ImageConverter class is present in System.Drawing.dll.

public static byte[] BitmapToByteArray(Bitmap bitmap)

{            
     ImageConverter converter = new ImageConverter();            
     return (byte[])converter.ConvertTo(bitmap, typeof(byte[]));


Here is the code to convert byte[] to bitmap in C#

public static Bitmap ByteArrayToBitMap(byte[] imageData)        
{            
    Bitmap bmp;            
    using (var ms = new MemoryStream(imageData))
    {            
        bmp = new Bitmap(ms);
    }                       
return bmp;        
}


Create Thumbnail of Image using C#

Thumbnail is the reduced sized image of the given image. We can use thumbnail where we need to display large number of images. Using  GetThumbnailImage method we can create thumbnail for any give image.

The basic syntax used to create thumbnail using C# is -

Image img = Image1.GetThumbnailImage(thumbnail.Height, thumbnail.Width, Image.GetThumbnailImageAbort callback, IntPtr callbackData)


Here is the example -


Bitmap testimage = (Bitmap)TestApplication.Properties.Resources.testimage.GetThumbnailImage(450,550, null, IntPtr.Zero);

Pass byte array from C# to C++                          

If you want to pass a byte array to native DLL as parameter, you can use the Intptr to do this, please check the demo below.
//C++ API code:
TestDLL_API  void TestArrayPara(BYTE * pArray, int nSize)
{
        for (int i=0; i<nSize; i++)
        printf("%d\n", pArray[i]);
}

//C# code:
class TestClass
    {
        [DllImport(@"TestDll.dll")]
        public static extern void TestArrayPara(IntPtr pArray, int nSize);
        public static void Test()
        {
            byte[] array = new byte[16];
             for (int i = 0; i < 16; i++)
            {
                array[i] = (byte)(i + 97);
            }
            int size = Marshal.SizeOf(array[0]) * array.Length;
            IntPtr pnt = Marshal.AllocHGlobal(size);
           try
            {
                // Copy the array to unmanaged memory.
                Marshal.Copy(array, 0, pnt, array.Length);               
            }
            finally
            {
                // Free the unmanaged memory.
               // Marshal.FreeHGlobal(pnt);
            }
            TestArrayPara(pnt, array.Length);
            Marshal.FreeHGlobal(pnt);
            Console.WriteLine("End of app");
        }
}


Return char array from C++ to c#


//C++ code
extern "C" __declspec(dllexport) int* test() 
{
    int * arr=new int[4];
    arr[0]=1;
    arr[1]=2;
    arr[2]=3;
    arr[3]=4;
        return arr;}

extern "C" __declspec(dllexport) int ReleaseMemory(int* pArray){
    delete[] pArray;
    return 0;}


//C# code
[DllImport("C:\\Devs\\C++\\Projects\\Interop\\InteropTestApp\\Debug\\InteropTestApp.dll")]
        public static extern IntPtr test();

        [DllImport("C:\\Devs\\C++\\Projects\\Interop\\InteropTestApp\\Debug\\InteropTestApp.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int ReleaseMemory(IntPtr ptr);
        static void Main(string[] args)
        {
            IntPtr ptr = test();
            int[] result = new int[4];
            Marshal.Copy(ptr, result, 0, 4);
            ReleaseMemory(ptr);
            Console.ReadKey();
        }
    }


Comments

Popular posts from this blog

Show Image on canvas HTML5

Here is the sample code to select image from system and display it on html5 canvas and javascript: <input type= "file" id= "selectedImage" /> <canvas id= "myCanvas" width= "500" height= "500" > </canvas> Javascript code: $( "#selectedImage" ).change( function (e) { var URL = window .URL; var url = URL.createObjectURL(e.target.files[ 0 ]); img.src = url; img.onload = function () { var canvas = document .getElementById( "myCanvas" ); var ctx = canvas.getContext( "2d" ); var imgSize = calculateAspectRatioFit(img.width, img.height, canvas.clientWidth, canvas.clientHeight); ctx.clearRect( 0 , 0 , canvas.width, canvas.height); ctx.drawImage(img, 0 , 0 , imgSize.width, imgSize.height); } }); function calculateAspectRatioFit(srcWidth, srcHeight, maxWidth, maxHeight) { var ratio = Math .min(maxWi

Pass byte array from C# to C++ and vice-versa

Pass byte array from C# to C++                           If you want to pass a byte array to native DLL as parameter, you can use the Intptr to do this, please check the demo below. /C++ API code: TestDLL_API void TestArrayPara (BYTE * pArray, int nSize) { for ( int i= 0 ; i<nSize; i++) printf( "%d\n" , pArray[i]); } //C# code: class TestClass { [DllImport(@"TestDll.dll")] public static extern void TestArrayPara (IntPtr pArray, int nSize); public static void Test () { byte [] array = new byte [ 16 ]; for ( int i = 0 ; i < 16 ; i++) { array[i] = ( byte )(i + 97 ); } int size = Marshal.SizeOf(array[ 0 ]) * array.Length; IntPtr pnt = Marshal.AllocHGlobal(size); try { // Copy the array to unmanaged memory. Marshal.Copy(array, 0 , pnt, array

Display Tooltip for Combo Box item C#.NET Winforms

In windows form combo box control sometimes while adidng items dynamically we have items whose width is greater than width of combox box control. In this case for making UI more user friendly we can show tooltip over such item. Here is the sample C# code to display such tooltip:  Add a Tooltip control on the form.  Add following code : this . combo_box1 . DropDownStyle = System . Windows . Forms . ComboBoxStyle . DropDownList; this . combo_box1 . DrawMode = DrawMode . OwnerDrawFixed; this . combo_box1 . DrawItem += new DrawItemEventHandler(combo_box1_DrawItem); this . combo_box1 . DropDownClosed += new EventHandler(combo_box1_DropDownClosed); this . combo_box1 . MouseLeave += new EventHandler(combo_box1_Leave); void combo_box1_DrawItem( object sender, DrawItemEventArgs e) { if (e . Index < 0 ) { return ; } string text = combo_box1 . GetItemText(combo_box1 . Items[e . Index