» »

[c#] Spreminjanje barve v sliki

[c#] Spreminjanje barve v sliki

HellRaiseR ::

Imam naslednji problem, ki ga nikakor ne znam rešiti. Pri določeni sliki, bi rad popravil odtenek zelene barve(slika je sestavljena samo iz zelene in črne barve), zato sem napisal preprost programček, ki popravi odtenek zelene, če le ta ni pravi. Takole zgleda glavni del programa.

private void btnZacni_Click(object sender, EventArgs e)
{
int stzamenjav = 0;
if (tbIzovrnaDatoteka.Text == String.Empty) return;
Bitmap slika = new Bitmap(tbIzovrnaDatoteka.Text);
Bitmap novaslika = new Bitmap(slika.Width, slika.Height);
for (int visina = 0; visina < slika.Height; visina++)
{
for (int sirina = 0; sirina < slika.Width; sirina++)
{
int barva = slika.GetPixel(sirina, visina).ToArgb();
if (barva != _crna && barva != _zelena)
{
stzamenjav++;
novaslika.SetPixel(sirina, visina, Color.FromArgb(_zelena));
}
else
{
novaslika.SetPixel(sirina, visina, Color.FromArgb(barva));
}
}
}
novaslika.Save("C:\\nova5.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
MessageBox.Show("Koncano! St. zamenjav: " + stzamenjav);
}

Program sicer dela vredu in zamenja barvo, vendar pa shrani 24bitno sliko, sam pa rabim 8bitno sliko. Ko zadevo recimo odprem v slikarju in shranim kot 256 barvno sliko, se potem odtenek zelene barve zamenja, kar bi sicer bilo razumljivo, če ne bi bil ta odtenek zelene pravzaprav vzet iz druge 8bitne slike, torej bi po vsej logiki moral obstajati in ga program nebi smel zamenjati. Ima mogoče kdo idejo kaj sem spregledal, ker sam z raznimi formati slik nimam izkušenj.

darkolord ::

Eden od konstruktorjev za Bitmap sprejme parameter tipa PixelFormat - tam lahko izbereš, da bo slika 8 bitna.

rookie123 ::

Mene pa zanima, kako bi sliki, ki jo dobim od uporabnika zmanjšal velikost na določeno število piksov, da bi potem zmanjšano dal v bazo. Ima kdo kak predlog?

Koda za prebrano sliko, ki jo shranim v bazo pa je tu:

public void OnUpload(Object sender, EventArgs e)
{
// Create a byte[] from the input file

int len = Upload.PostedFile.ContentLength;
byte[] pic = new byte[len];
Upload.PostedFile.InputStream.Read (pic, 0, len);
// Insert the image and comment into the database

SqlConnection connection = new
SqlConnection (@"server=INDIA\INDIA;database=iSense;uid=sa;pwd=india");
try
{
connection.Open ();
SqlCommand cmd = new SqlCommand ("insert into Image "
+ "(Picture, Comment) values (@pic, @text)", connection);
cmd.Parameters.Add ("@pic", pic);
cmd.Parameters.Add ("@text", Comment.Text);
cmd.ExecuteNonQuery ();
}
finally
{
connection.Close ();
}
}

Zgodovina sprememb…

darkolord ::

Konstruktorju za Bitmap lahko podaš stream. Potem pa uporabiš nekaj takega za resize:

public Bitmap ResizeBitmap( Bitmap b, int nWidth, int nHeight )
{
  Bitmap result = new Bitmap( nWidth, nHeight );
  using( Graphics g = Graphics.FromImage( (Image) result ) )
    g.DrawImage( b, 0, 0, nWidth, nHeight );
  return result;
}


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[c#] picturebox, slika na sliko

Oddelek: Programiranje
151072 (882) japol
»

C# INSERT statment ne vpise podatkov

Oddelek: Programiranje
111172 (1046) darkolord
»

[Visual C#] TableAdapter

Oddelek: Programiranje
61115 (991) detroit
»

Statistika dijakov, pomoc

Oddelek: Programiranje
211750 (1234) Mitja Bonča
»

[C#] Query in code

Oddelek: Programiranje
261799 (1543) iggy1

Več podobnih tem