Convert Image to Base64 String and Base64 String to Image

This article will help you to learn how we can convert an image into a base64 string and base64 string back to image.

Image to Base64 String

public string ImageToBase64(Image image, System.Drawing.Imaging.ImageFormat format)
{
  using (MemoryStream ms = new MemoryStream())
  {
    // Convert Image to byte[]
    image.Save(ms, format);
    byte[] imageBytes = ms.ToArray();

    // Convert byte[] to Base64 String
    string base64String = Convert.ToBase64String(imageBytes);
    return base64String;
  }
}

Base64 String to Image

public Image Base64ToImage(string base64String)
{
  // Convert Base64 String to byte[]
  byte[] imageBytes = Convert.FromBase64String(base64String);
  MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);

  // Convert byte[] to Image
  ms.Write(imageBytes, 0, imageBytes.Length);
  Image image = Image.FromStream(ms, true);
  return image;
}

Coding in real world

 


Result

Download: https://github.com/tuanitpro/base64toimage

Online test: http://codebeautify.org/base64-to-image-converter

Happy coding 🙂

Reverse opposing colors C#, Java

I have a user setup where they can choose the colors of the alerts. the Alert is the background color on a text or button. But the problem comes in that if they select a dark blue and we have black letters the contrast isnt enough and you cannot read it.

I have tried to make a function to get the reverse opposing color but havent got too far. Is there such a function?

—————-

I found that the best solution for me is to convert the RGB values into YIQ values. As we are only interested in the brightness value (represented by Y), there is one single calculation to be done: Y = (299*R + 587*G + 114*B)/1000. The Java code for that would look like this:

public static Color getContrastColor(Color color) {
  double y = (299 * color.getRed() + 587 * color.getGreen() + 114 * color.getBlue()) / 1000;
  return y >= 128 ? Color.black : Color.white;
}

Code C#

public static Color GetContrastColor(Color color)
        {
            double y = (double)(299 * color.R + 587 * color.G + 114 * color.B) / 1000;
            return y >= 128 ? Color.Black : Color.White;
        }

How to use

System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#3399cc");
var c = GetContrastColor(col);
 return "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");

 

How to create own dynamic type or dynamic object in C#

How to create own dynamic type or dynamic object in C#

using System.Reflection;
using System.Reflection.Emit;
public static class MyTypeBuilder
    {
        
        public static System.Collections.IList CreateInstanceIList(Type _type)
        {
            Type customList = typeof(List<>).MakeGenericType(_type);
            var result = (System.Collections.IList)Activator.CreateInstance(customList);
            return result;
        }
        public static Type CompileResultType(Dictionary<string, Type> listOfFields)
        {
            TypeBuilder tb = GetTypeBuilder();
            foreach (var field in listOfFields)
                CreateProperty(tb, field.Key, field.Value);

            Type objectType = tb.CreateType();

            return objectType;
        }

        private static TypeBuilder GetTypeBuilder()
        {
            var typeSignature = "MyDynamicType_" + DateTime.Now.ToString("yyyyMMddHHmmss");
            var an = new AssemblyName(typeSignature);
            AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run);
            ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MainModule");
            TypeBuilder tb = moduleBuilder.DefineType(typeSignature,
                    TypeAttributes.Public |
                    TypeAttributes.Class |
                    TypeAttributes.AutoClass |
                    TypeAttributes.AnsiClass |
                    TypeAttributes.BeforeFieldInit |
                    TypeAttributes.AutoLayout,
                    null);
            return tb;
        }

        private static void CreateProperty(TypeBuilder tb, string propertyName, Type propertyType)
        {
            FieldBuilder fieldBuilder = tb.DefineField("_" + propertyName, propertyType, FieldAttributes.Private);

            PropertyBuilder propertyBuilder = tb.DefineProperty(propertyName, PropertyAttributes.HasDefault, propertyType, null);
            MethodBuilder getPropMthdBldr = tb.DefineMethod("get_" + propertyName, MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, propertyType, Type.EmptyTypes);
            ILGenerator getIl = getPropMthdBldr.GetILGenerator();

            getIl.Emit(OpCodes.Ldarg_0);
            getIl.Emit(OpCodes.Ldfld, fieldBuilder);
            getIl.Emit(OpCodes.Ret);

            MethodBuilder setPropMthdBldr =
                tb.DefineMethod("set_" + propertyName,
                  MethodAttributes.Public |
                  MethodAttributes.SpecialName |
                  MethodAttributes.HideBySig,
                  null, new[] { propertyType });

            ILGenerator setIl = setPropMthdBldr.GetILGenerator();
            Label modifyProperty = setIl.DefineLabel();
            Label exitSet = setIl.DefineLabel();

            setIl.MarkLabel(modifyProperty);
            setIl.Emit(OpCodes.Ldarg_0);
            setIl.Emit(OpCodes.Ldarg_1);
            setIl.Emit(OpCodes.Stfld, fieldBuilder);

            setIl.Emit(OpCodes.Nop);
            setIl.MarkLabel(exitSet);
            setIl.Emit(OpCodes.Ret);

            propertyBuilder.SetGetMethod(getPropMthdBldr);
            propertyBuilder.SetSetMethod(setPropMthdBldr);
        }
    }

How to use

 public JsonResult DynamicObject()
        {

            Dictionary<string, Type> listOfFields = new Dictionary<string, Type>();

            listOfFields.Add("Name", typeof(string));
            listOfFields.Add("Age", typeof(int));
            var myType = MyTypeBuilder.CompileResultType(listOfFields);
            var myObject = Activator.CreateInstance(myType);

            myType.GetProperty("Name").SetValue(myObject, "Tuan", null);
            myType.GetProperty("Age").SetValue(myObject, 20, null);

            object name = myType.GetProperty("Name").GetValue(myObject);

            return Json(name.ToString(), JsonRequestBehavior.AllowGet);
            // return Json(myObject, JsonRequestBehavior.AllowGet);
        }

Mapping data to List

 public JsonResult DynamicObject2()
        {
            Dictionary<string, Type> listOfFields = new Dictionary<string, Type>();
            listOfFields.Add("Name", typeof(string));
            listOfFields.Add("Age", typeof(int));

            var myType = MyTypeBuilder.CompileResultType(listOfFields);
            var list = MyTypeBuilder.CreateInstanceIList(myType);
            var listString = listOfFields.Select(x => x.Key).ToArray();

            Type t = typeof(YourObject); // your class define
            PropertyInfo[] props = t.GetProperties().Where(x => listString.Contains(x.Name)).ToArray();

            var data = ListYourObjects(); // your list data

            // mapping only you need
            foreach (var item in data)
            {
                var myObject = Activator.CreateInstance(myType);
                foreach (var prop in props)
                {
                    object name = t.GetProperty(prop.Name).GetValue(item);
                    myType.GetProperty(prop.Name).SetValue(myObject, name, null);
                    
                }
                list.Add(myObject);
            }

            return Json(list, JsonRequestBehavior.AllowGet);
        }

 

Lớp được niêm phong (Sealed class) là gì? Dùng trong những trường hợp nào?

Lớp được niêm phon (Sealed class) là một lớp không cho các lớp khác kế thừa từ nó. Ví dụ khi bạn phát triển một thư viện class nào đấy, trong đó có một lớp có đầy đủ những chức năng cần thiết cho một nghiệp vụ nào đấy và bạn không muốn lớp này được dẫn xuất, mở rộng bởi những lập trình viên kế thừa sau này, lúc đó bạn sử dụng lớp niêm phong với từ khóa sealed :

public sealed class A
{
public sealed void XinChao()
{ }
}

Một vài quy tắc khi sử dụng lớp niêm phong :

– Không được khai báo protected hay virtual trong lớp được niêm phong

C# MDI Form

A Multiple Document Interface (MDI) programs can display multiple child windows inside them. This is in contrast to single document interface (SDI) applications, which can manipulate only one document at a time. Visual Studio Environment is an example of Multiple Document Interface (MDI) and notepad is an example of an SDI application. MDI applications often have a Window menu item with submenus for switching between windows or documents.

mdiform

Any windows can become an MDI parent, if you set the IsMdiContainer property to True.

IsMdiContainer = true;

The following C# program shows a MDI form with two child forms. Create a new C# project, then you will get a default form Form1 . Then add two mnore forms in the project (Form2 , Form 3) . Create a Menu on your form and call these two forms on menu click event.

NOTE: If you want the MDI parent to auto-size the child form you can code like this.

  form.MdiParent = this;
  form.Dock=DockStyle.Fill;
  form.Show();

Full Code

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            IsMdiContainer = true;
        }

        private void menu1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.Show();
            frm2.MdiParent = this;
        }

        private void menu2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form3 frm3 = new Form3();
            frm3.Show();
            frm3.MdiParent = this;
        }
    }
}

 

How do I set the height of a ComboBox?

I have a ComboBox on a form, and its default height is 21. How do I change it?

ComboBox auto-sizes to fit the font. Turning that off is not an option. If you want it bigger then give it a bigger font.

Just as another option, if you’d like to increase the height of the ComboBox without increasing the font size or having to worry about drawing everything yourself, you can use a simple Win32 API call to increase the height like this:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace CsvReader
{
    public partial class Form2 : Form
    {
        [DllImport("user32.dll")]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam);
        private const Int32 CB_SETITEMHEIGHT = 0x153;

        private void SetComboBoxHeight(IntPtr comboBoxHandle, Int32 comboBoxDesiredHeight)
        {
            SendMessage(comboBoxHandle, CB_SETITEMHEIGHT, -1, comboBoxDesiredHeight);
        }
        public Form2()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            SetComboBoxHeight(comboBox1.Handle, 50);
            comboBox1.Refresh();
        }
    }
}

Result:

How do I set the height of a ComboBox?
How do I set the height of a ComboBox?

How will you print numbers from 1 to 100 without using loop?

Here is a solution that prints numbers using recursion.

Other alternatives for loop statements are recursion and goto statement, but use of goto is not suggestible as a general programming practice as goto statement changes the normal program execution sequence and makes it difficult to undestand and maintain.

#include <stdio.h>

/* Prints numbers from 1 to n */
void printNos(unsigned int n)
{
if(n > 0)
{
	printNos(n-1);
	printf("%d ", n);
}
return;
}

/* Driver program to test printNos */
int main()
{
printNos(100);
getchar();
return 0;
}

Demo online here

Insert hình ảnh vào Sql Server trong C#

Insert hình ảnh vào Sql Server trong C#
Insert hình ảnh vào Sql Server trong C#

Khi làm việc với các ứng dụng quản lý trên C# như ứng dụng quản lý sinh viên, quản lý nhân viên, … chúng ta có nhiều tình huống cần lưu trữ hình ảnh, ví dụ như là hình ảnh của sinh viên, nhân viên… Làm sao chúng ta giải quyết vấn đề đó?
Các giải pháp nào để lưu trữ hình ảnh. Nếu muốn lưu hình ảnh đó vào Cơ sở dữ liệu Sql Server thì làm thế nào? Làm sao để hiển thị chúng ra ngoài ứng dụng?

Video Insert hình ảnh vào Sql Server trong C#

Tóm tắt Video

  • Các loại lưu trữ hình ảnh. Ưu và nhược điểm?
  • Tạo Cơ sở dữ liệu bảng Student (lưu thông tin sinh viên)
  • Tạo dự án WindowForm mới
  • Tạo form thêm sinh viên
  • Tạo DataGridview load danh sách sinh viên
  • Code xử lý chuyển ảnh thành byte.
  • Code xử lý chuyển byte thành ảnh
  • Code xử lý dữ liệu, (select, insert….)
Nếu bạn đã hoàn thành theo hướng dẫn mà vẫn gặp khó khăn, hãy tải mã nguồn ứng dụng tại đây:  Download

Cảm ơn bạn đọc và mình luôn đánh giá cao phản hồi của bạn.

Vừa gà vừa chó, bó lại cho tròn, ba mươi sáu con, một trăm chân chẵn. Hỏi mấy gà, mấy chó?

Vừa gà vừa chó, bó lại cho tròn, ba mươi sáu con, một trăm chân chẵn. Hỏi mấy gà, mấy chó?
Vừa gà vừa chó, bó lại cho tròn, ba mươi sáu con, một trăm chân chẵn. Hỏi mấy gà, mấy chó?

Có một bài toán dân gian khá thú vị như sau:

Vừa gà vừa chó
Bó lại cho tròn
Ba mươi sáu(36) con
Một trăm(100) chân chẵn
Hỏi mấy gà, mấy chó?

Đây là bài toán vui, từ khi học tiểu học mình đã biết, lên trung học, học giải phương trình cũng gặp lại nó. Và bây giờ, làm lập trình, tự dưng nhớ tới nó, nên viết ra đây, coi như chia sẻ cho các bạn mới học lập trình có thêm hào hứng, giải quyết các bài tập nho nhỏ, vui vẻ tương tự.

Cách giải nó như sau:

Gọi x là số gà
Số chó là: 36 – x
Số chân gà: 2x
Số chân chó: 4(36-x)
theo đề bài ta có:
2x + 4(36 – x) =100
2x + 144 – 4x = 100
2x = 144 – 100
2x = 44
x = 22
Vậy số gà là 22 con
Số chó : 36 – 22 = 14

Bạn bảo mấy con chó đặt 2 chân trước lên ghế,tổng số chân dưới đất sẽ là 36 x 2  = 72 chân. Suy ra số chân trên ghế là 28 chân.
Vậy có 14 con chó ….

Dùng hệ phương trình
Gọi x là gà, y là chó
Ta có hệ pt:
x + y = 36
2x + 4y = 100
Giải hệ pt
x = 22,y = 14
Vậy gà có 22 con, chó có 14 con. Mời các bạn chia sẻ thêm cách giải hay, thú vị khác nữa nhé.

Vậy thì làm sao để giải nó bằng cách lập trình. Đây không phải vấn đề khó với nhiều bạn, tuy nhiên mình thấy vui vẻ, nên vẫn viết ra đây.

Sau đây là cách giải trong một số ngôn ngữ lập trình như Pascal, C++, C#, Java, PHP, ASP.NET, Javascript. Trường hợp máy bạn không cài sẵn IDE, bạn có thể sử dụng trang web http://ideone.com để chạy thử code.

Vì số con là 36 và số chân là 100. Giả sử tất cả là chó, thì số con tối đa là 100/4 = 25 (con). Tối thiểu là 36 / 4 = 9 (con). Như vậy chúng ta chỉ cần sử dụng vòng lặp for từ 9->25. Tối ưu hơn so với từ 0 -> 36

Pascal

program HelloWorld;
var i :Integer;
begin
  	writeln('Giai bai toan dan gian bang Pascal');
	writeln('Vua ga vua cho');
	writeln('Bo lai cho tron');
	writeln('Ba muoi sau(36) con');
	writeln('Mot tram(100) chan chan');
	writeln('Hoi may ga, may cho?');
	for i:= 9 to 25 do
		if((i * 2 + (36 - i) * 4) = 100) then
			writeln('So ga la: ', i);
			writeln('So cho la: ', 36 - i);
	
end.

C++

#include <string>
#include<iostream>;
#include<stdio.h>;
 
using namespace std;

int main(){
	cout << "Gia bai toan dan gian trong C++\n";
	cout << "Vua ga vua cho\n";
	cout << "Bo lai cho tron\n";
	cout << "Ba muoi sau(36) con\n";
	cout << "Mot tram(100) chan chan\n";
	cout << "Hoi may ga, may cho?\n";
	cout << "\n";
	for (int i = 9; i < 25; i++)
	{
		if ((i * 2 + (36 - i) * 4) == 100){
			cout << "So ga la: " << i << "\n";
			cout << "So cho la: " << (36 - i) << "\n";
                        break;
		}
	}
}

Java

public class Main {

	public Main() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Giải bài toán dân gian trong Java");
		System.out.println("Vừa gà vừa chó");
		System.out.println("Bó lại cho tròn");
		System.out.println("Ba mươi sáu(36) con");
		System.out.println("Một trăm(100) chân chẵn");
		System.out.println("Hỏi mấy gà, mấy chó?\n");
		for(int i = 9; i < 25; i++){
			if((i*2+(36-i)*4)==100){
				System.out.println("Số gà là: " + i);
				System.out.println("Số chó là: " + i);
			}
		}
	}
}

C#

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Gia bai toan dan gian trong C#");
            Console.Write("Vua ga vua cho\n");
            Console.Write("Bo lai cho tron\n");
            Console.Write("Ba muoi sau(36) con\n");
            Console.Write("Mot tram(100) chan chan\n");
            Console.WriteLine("Hoi may ga, may cho?\n");
            for (int i = 9; i <= 25; i++)
            {
                if ((2 * i + (36 - i) * 4) == 100)
                {
                    Console.WriteLine("So ga la: " + i);
                    Console.WriteLine("So cho la: " + (36 - i));
                    break;
                }
            }

            Console.ReadKey();
        }
    }

ASP.NET

void GiaiBaiToanDanGian()
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 9; i < 25; i++)
        {
            if ((i * 2 + (36 - i) * 4) == 100)
            {
                sb.AppendLine("Số gà là: " + i);
                sb.AppendLine("Số chó là: " + (36 - i));
            }
        }
        Label1.Text = sb.ToString();
    }

PHP

<html>
	<head>
		<meta charset="UTF-8"/>
		<title>Bài toán dân gian</title>				
	</head>
	<body>
		<b>Giải bài toán dân gian trong PHP</b></br>
		Vừa gà vừa chó </br>
		Bó lại cho tròn </br>
		Ba mươi sáu(36) con </br>
		Một trăm(100) chân chẵn</br>
		Hỏi mấy gà, mấy chó?</br>
		</br>
		<?php 
			for($i = 9; $i < 25; $i ++)
			{
				if(($i * 2 + (36-$i)*4) == 100)
				{
					echo 'Số gà là: '.$i.'</br>';
					echo 'Số chó là: '.(36 - $i);
				}
			}
		?>
	</body>
</html>

Javascript

<script type="text/javascript">
	alert('Giai bai toan dan gian');
	for(i = 9; i < 25; i++)
	{
		if((i * 2 + (36-i)*4) === 100){
			alert('Số gà là: ' + i + '; Số chó là: '+(36-i));
		}
	}
</script>

Chúc các bạn học lập trình vui vẻ