Laman

Senin, 16 Mei 2011

Convert a Image file in byte pointer data in C# (C Sharp)

Kehandalan C dibandingkan dengan bahasa lain adalah kecepatan nya, sayangnya kecepatan dalam C harus dibayar dengan rumitnya pointer, maka dari itu lahirlah bahsa pemrograman yang diciptakan oleh Mocrosoft yang bekerja sama dengan pendiri Borland yang akhirnya tercipta bahasa pemrograman setingkat diatas C++ yaitu C#, bahkan Microsoft membuat sebuah IDE dimana C# dapat diprogram secara visual yaitu dengan Microsoft Visual Studio. Tujuan utama diciptakannya C# adalah menghilangkan konsep kersemerawutan pointer dan tetep menjaga kecepatan program berjalan, akan tetapi di C# tetap masih dipertahankan fungsi pointer, hanya saja mengalami sedikit modifikasi, berikut ini adalah contoh menggunakan fungsi dengan pointer dimana project ini mengkonvert data dari sebuah citra menjadi byte data pointer. Berikut adalah Source code contoh penggunaan Pointer
Bitmap pbmpp=new bitmap("Filelocation");
  int t=0;
  int g=0;
  int b=0;
  int a =0;
  Bitmap data=pbmpp.LockBits(New   rectangle(0,0,pbmpp.width,pbmpp.height)),byte*imgPtr=(Byte*)(data.Scan0);
  pbmpp.UnlockBits(data);
  < font=""> <>
    {
      for (int t=0;t < pbmpp.height;y++)< font=""> <>
    {
  a=(int)*imgptr;
  imgPtr++;
  r=(int)*imgPtr;
  imgPtr++;
  g=(int)imgPtr;
  imgPtr++;
  b=(int)*imgPtr;
  imgPtr++;
  }
  imgPtr+=data.Stride-pbmpp.Height*4
}

Contoh penggunaan sintak
PixelFormat.Format32bppArgb
Sebagai data Bitmapa, sehingga setiap piksel mengandung  4 nilai urutannya adalah merah, hijau, biru dan nilai dari ketiga parameter tersebut
byte*imgPtr=(byte*)(data.Scan0);

Ini adalah byte dari pointer image dengan menggunakan pointer imgprt
kemudian kita menggunakan dua perulangan setiap byte secara berkelanjutan yang menunjukan alpha, merahm hijau, biru,  dimana alpha, merahm hijau, dan biru merupakan nilai dari piksel. Untuk
then we start two loop in innar loop every byte continously represent alpha, red, green, blue, alpha red, green, blue................. value of pixel. Selanjutnya pada barus ke dua kita bisa lihat source code berikut ini
imgPtr+=data.Stride-pbmpp.Height*4;

Berikut adalah dikalikan dengan empat, karena piksel format kita adalah "PixelFormat.From32bppArgb". Sekarang jika kamu ingin mengambil nilai 4 byte , anda bisa menggunakan source code berikut ini

bitmapData data=pbmpp.LockBits(new Rectangle(0,0,pbmpp.width,pbmpp.height), ImageLockMode.Readwrite,PixelFormat.Format32bppArgb);
byte*imgptr=(byte*)(data.scan0);
pbmpp.UnlockBits(data);
for (int x=0;x< pbmpp.width;x++)< font=""> <>
{for (int y=0;y < pbmpp.height;y++)< font=""> <>
{Color c=Color.FromArgb((int)*imgPtr);
imgPtr=imgPtr+4;}imgPtr+=data.Stride-pbmpp.Height*4}
 
Sekarang jika anda ingin pixelFormat yang lainnya seperti "PixelFormat.Fromat24bggRgb" dimana hanya merah hijau dan biru yang ada, anda harus merubah source code seperti berikut ini


Bitmap pbmpp=new bitmap("file location");
int r=0;
int g=0;
int b=0;
Bitma data=pbmpp.LockBits(new rectangle(0,0,pbmpp.width, pbmpp.Height),ImageLockMode.readWrite,PixelFormat.Format24bppRgb);
byte* imgptr=(byte*)(data.Scan0)
pbmpp.UnlockBits(data);
for (int x=0;x < pbmpp.width;x++)< font=""> <>
{
for (int y=0;y< pbmpp.height;y++)< font=""> <>
{
r=(int)*imgPtr;
imgPtr++;
g=(int)*imgPtr;
imgPtr++;
b=(int)*imgPtr;
imgPtr++;
}
imgPtr+=data.Stride-pbmpp.Height*3;
}

 Artikel yang terkait

14 komentar: