Condividi tramite


Konverter dine farvebilleder til sort-hvid med C#

Jeg var nede hos en foto handler idag med min USB nøgle. Nøglen var fyldt med farvebilleder og jeg skulle have dem fremkaldt fordi jeg er igang med at lave en stor fotovæg derhjemme.

Da jeg bad om at få fremkaldt mine billeder til sort-hvid sagde ekspedienten at dette slet ikke kunne lade sig gøre, og han mente yderliger, at ingen i København ville tilbyde den mulighed.

Straks så jeg for mig, at jeg skulle sidde i IrfanView resten af dagen for at konverter mine billeder fra farve til sort-hvid. "Hell no, det gør jeg simpelthen ikke".

Hjem i sofaen som jeg forresten har siddet i hele ugen da jeg har ødelagt mit højre knæ. Jeg fik fyret op i Visual Studio og tænkte "Det kan gøres hurtigere med kode".

Det her var hvad det blev til:

Download C# koden.
Download VB koden.

C#

    1:  using System;
    2:  using System.Linq;
    3:  using System.IO;
    4:  using System.Drawing;
    5:   
    6:  namespace DanielFrost.GDILibrary
    7:  {
    8:      class Program
    9:      {
   10:          const string dirPath = @"C:\Billeder\Store billeder";
   11:          const string savePath = @"C:\Billeder\Store billeder\Blackwhite\";
   12:   
   13:          static void Main( string[] args )
   14:          {
   15:              DirectoryInfo directory = new DirectoryInfo( dirPath );
   16:   
   17:              var query = from files in directory.GetFiles()
   18:                          select files;
   19:   
   20:              ConvertImagesToGrayScale( query.ToArray() );
   21:          }
   22:   
   23:          static void ConvertImagesToGrayScale(FileInfo[] files)
   24:          {
   25:              foreach( FileInfo file in files ) {
   26:                  Bitmap bitmap = new Bitmap( file.FullName );
   27:   
   28:                  int green = 0;
   29:                  int red = 0;
   30:                  int blue = 0;
   31:                  int newColor = 0;
   32:                  Color color = new Color();
   33:   
   34:                  for( int i = 0; i < bitmap.Height; i++ ) {
   35:                      for( int x = 0; x < bitmap.Width; x++ ) {
   36:                          color = bitmap.GetPixel( x, i );
   37:                          red = (int)( color.R * 0.3 );
   38:                          blue = (int)( color.G * 0.59 );
   39:                          green = (int)( color.B * 0.11 );
   40:   
   41:                          newColor = red + blue + green;
   42:   
   43:                          bitmap.SetPixel( x, i, Color.FromArgb( newColor, newColor, newColor ) );
   44:                      }
   45:                  }
   46:   
   47:                  bitmap.Save( String.Concat(savePath, file.Name) );
   48:                  bitmap.Dispose();
   49:              }
   50:          }
   51:      }
   52:  }

VB:

    1:  Imports Microsoft.VisualBasic
    2:  Imports System
    3:  Imports System.Linq
    4:  Imports System.IO
    5:  Imports System.Drawing
    6:   
    7:  Namespace DanielFrost.GDILibrary
    8:      Friend Class Program
    9:          Private Const dirPath As String = "C:\Users\danielmf\Desktop\Store billeder"
   10:          Private Const savePath As String = "C:\Users\danielmf\Desktop\Store billeder\Blackwhite\"
   11:   
   12:          Shared Sub Main(ByVal args() As String)
   13:              Dim directory As New DirectoryInfo(dirPath)
   14:   
   15:              Dim query = From files In directory.GetFiles() _
   16:                          Select files
   17:   
   18:              ConvertImagesToGrayScale(query.ToArray())
   19:          End Sub
   20:   
   21:          Private Shared Sub ConvertImagesToGrayScale(ByVal files() As FileInfo)
   22:              For Each file As FileInfo In files
   23:                  Dim bitmap As New Bitmap(file.FullName)
   24:   
   25:                  Dim green As Integer = 0
   26:                  Dim red As Integer = 0
   27:                  Dim blue As Integer = 0
   28:                  Dim newColor As Integer = 0
   29:                  Dim color As New Color()
   30:   
   31:                  For i As Integer = 0 To bitmap.Height - 1
   32:                      For x As Integer = 0 To bitmap.Width - 1
   33:                          color = bitmap.GetPixel(x, i)
   34:                          red = CInt(Fix(color.R * 0.3))
   35:                          blue = CInt(Fix(color.G * 0.59))
   36:                          green = CInt(Fix(color.B * 0.11))
   37:   
   38:                          newColor = red + blue + green
   39:   
   40:                          bitmap.SetPixel(x, i, Color.FromArgb(newColor, newColor, newColor))
   41:                      Next x
   42:                  Next i
   43:   
   44:                  bitmap.Save(String.Concat(savePath, file.Name))
   45:                  bitmap.Dispose()
   46:              Next file
   47:          End Sub
   48:      End Class
   49:  End Namespace

Så nu har jeg mulighed for at konverter mine billeder fra farve til sort-hvid. Måske skulle jeg sælge det her kode til samtlige foto butikker i landet :)