Arsip: convert gambar dr 24bit jadi 1 bit

 
user image
more 14 years ago

wasqto

haloo teman2 yang jago2 delphi...saya anggota baru nihh... saya mau bikin tugas kuliah. salah satunya untuk meng-convert gambar dari 24 bit / true colors jadi gambar 1 bit alias black/white. gimana caranya yah?? mohon bantuannya... thanx a lot!!
user image
more 14 years ago

sukuguci

coba kamu baca buku rinaldi munir terbitan informatika bandung tentang pengolahan algoritma pengolahan citra dengan bahasa pengantar C++. Prisip nya sederhana, semua pixel dengan intensitas 0(hitam) sampai dengan (2^24)/2 akan dijadikan hitam atau 0 dan diatas itu jadi putih atau 1.
user image
more 14 years ago

pebbie

just for information. binerisasi gambar true color terjadi dua tahap : - konversi ke format intensitas (greyscale) . ada beberapa cara : bisa sekedar rata-rata komponen r, g, dan b (setiap komponen koefisiennya 1). atau dengan koefisien tertentu untuk tiap r, g, dan b. - tresholding : konversi greyscale (256 tingkat intensitas) ke biner (2 tingkat intensitas). ditentukan nilai tertentu sebagai ambang (t) jika intensitas suatu pixel lebih besar atau sama dengan t maka pixel tersebut diset ke maksimum (biner 1), dan minimum jika lebih kecil dari nilai ambang t (biner 0)
user image
more 12 years ago

Leonardo

Aku uda nyoba cara konversi dari pf24bit ke pf1bit,(untuk conversi dari RGB->grascale->biner)tapi ketika uda jadi biner warna yang ada koq bukan putih hitam yah?...tapi malah hitam dan coklat (tanpa function), tapi klo aq pisah jadi function sendiri koq malah jadi biru sama hitam ya...tlg :roll:
user image
more 12 years ago

pebbie

masalahnya bukan pada TBitmap, tapi pada komponen penampilnya (TImage).
user image
more 12 years ago

Leonardo

ini cupilikan function yang aku bikin, dan tolong di koreksi kalo ada yang salah ya...
function grayscaling(var gbrIn:TBitmap):TBitmap;
Var
  GbrTmp:TBitmap;
  //GbrTmpTinggi,GbrTmpLebar:Cardinal;
  Bheight,Bwidth,i,j,c,GrayVal,GrayValCount :Cardinal;
  pixArrRGB,pixArrGrey:pbytearray;
  gbrOut:TBitmap;
Begin
  GbrTmp:=TBitmap.Create;
  GbrIn.PixelFormat:=pf24bit;
  Try
    With GbrTmp Do
    Begin
    PixelFormat:=pf24bit;
    Height:=gbrIn.Height;
    Width:=gbrIn.Width;
    End;
    for i:=0 to gbrIn.height-1 do
      begin
      pixArrRGB:=gbrIn.ScanLine[i];
      pixArrGrey:=GbrTmp.ScanLine[i];
        for j:=0 to gbrIn.width-1 do
        begin
        GrayVal:=round((pixArrRGB[j3])   0.11{Blue my Man!!})+round((pixArrRGB[j3+1])   0.59{Green Cing!})+round((pixArrRGB[j3+2])   0.3{MERAH Euy!});
        pixArrGrey[j3]:= GrayVal;
        pixArrGrey[j 3+1]:= GrayVal;
        pixArrGrey[j3+2]:= GrayVal;
        GrayValCount:=GrayValCount+GrayVal;//
        c:=c+1;     // 
        end
    end;
    GbrTmp.PixelFormat:=pf8bit;
    grayscaling:=GbrTmp;
  Finally
  //GbrTmp.Free;
  End;
End;
function binerisasi(var gbrIn:TBitmap):TBitmap;
Var
  GbrTmp:TBitmap;
  GbrTmpTinggi,GbrTmpLebar:Cardinal;
  Bheight,Bwidth,i,j,c,GrayVal,GrayValCount :Cardinal;
  pixArrBin,pixArrGrey:pbytearray;
  gbrOut:TBitmap;
Begin
  GbrTmp:=TBitmap.Create;
  GbrIn.PixelFormat:=pf8bit;
  Try
    With GbrTmp Do
    Begin
    PixelFormat:=pf1bit;
    Height:=gbrIn.Height;
    Width:=gbrIn.Width;
    End;
    for i:=0 to gbrIn.height-1 do
      begin
      pixArrGrey:=gbrIn.ScanLine[i];
      pixArrBin:=GbrTmp.ScanLine[i];
        for j:=0 to gbrIn.width-1 do
        begin
          if pixArrGrey[j]>=128then
            begin
              pixArrBin[j div 8]:=1;
              //gbrOut.Canvas.Pixels[i,j]:=255;
              //pixArrBin[j 3+1]:= 255;
              //pixArrBin[j3+2]:= 255;
            end
            else
              pixArrBin[j div 8]:= 0;//ColorToRGB(clBlack);;
              //gbrOut.Canvas.Pixels[i,j]:=0;
              //pixArrBin[j 3+1]:= 0;
              //pixArrBin[j*3+2]:= 0;
        end
    end;
    binerisasi:=GbrTmp;
  Finally
  //GbrTmp.Free;
  End;
End;
nah sekarang yang jadi masalah kenapa koq setelah berhasil bikin warnanya hitam putih, koq pixel yang kedetect lompat2 ya.... hasilnya mungkin kyk gini<br>
user image
more 12 years ago

betamax

coba mas periksa kembali kordinat piksel yang dirubah warnanya... apa sudah sama dengan piksel asal ?? terutama pada for i:=0 to gbrIn.height-1 do ... :)
user image
more 12 years ago

pebbie


for j:=0 to gbrIn.width-1 do
        begin
          if pixArrGrey[j]>=128then
            begin
              pixArrBin[j div 8] := pixArrBin[j div 8] or (1 shl j mod 8);
            end
            else
              pixArrBin[j div 8] := pixArrBin[j div 8] or (0 shl j mod 8);
        end
user image
more 12 years ago

pebbie

eh salah.. yang black itu harusnya

pixArrBin[j div 8] := pixArrBin[j div 8] and not (1 shl j mod 8);
user image
more 12 years ago

Leonardo

terima kasih atas saran mas-mas semua.... setelah beberapa lama ...saya kembali ke prinsip awal programming...yaitu..."Manusia harus bisa ngakali mesin... " :P ,sy telah berhasil mencoba konversi kemaren tetapi tidak menggunakan cara dari mas2 yang mas2 sarankan kemaren.., saya langsung mencoba untuk menembak tiap pixelnya dan langsung saya set jadi 0 dan 1..., dan ternyata malah berhasil... oya...saya pengen tau kalo untuk bisa mengetahui resolusi screen scr otomatis gmn caranya yah?....THX
more ...
  • Pages:
  • 1
  • 2
Share to

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com