NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Vyříznutí a zvětšení vyříznuté části z obrázku

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Mr. W3stik
Člen
Avatar
Mr. W3stik:10.5.2015 18:25

Zdravím lidi. Mám takový problém. Náš učitel na programování na střední škole není moc chytrý a programy bere od cizích, takže není schopen to sám vysvětlit a dává nám programy pouze opsat. Bohužel občas to někdo nestihne a pokud chce aby to učitel vrátil tak ho seřve. Toto je můj případ. Jelikož tu látku nechápu protože nám není vysvětlena obracím se na vás. Máme za úkol vyříznout kus obrázku (klasický výběr jako např. na ploše windows) a tu vyřízlou část zvětšit (každý pixel tam bude 4x). Vůbec nevím co s tím. Jediné co jsem vyřešil byl samotný výběr. Přikládám část kodu. Doufám že mi dokážete pomoci. Děkuji :)

void PictureBox1MouseMove(object sender, MouseEventArgs e)
                {
                        Bitmap Obr2 = new Bitmap(ObrPom);
                        if(Kreslit == true){
                                pictureBox1.Image = Obr2;
                                Graphics gr = Graphics.FromImage(Obr2);
                                Pen Pero = new Pen(Color.Red);
                                Pero.Width = 1;
                                gr.DrawLine(Pero,ZacX,ZacY,e.X,ZacY);
                                gr.DrawLine(Pero,e.X,ZacY,e.X,e.Y);
                                gr.DrawLine(Pero,ZacX,e.Y,e.X,e.Y);
                                gr.DrawLine(Pero,ZacX,ZacY,ZacX,e.Y);
                                gr.Dispose();
                                }
                        }

                void ZvětšitToolStripMenuItemClick(object sender, EventArgs e)
                {
                        Color Pixel;
                        Bitmap Obr2 = new Bitmap(ObrPom);
                        for(int x = ZacX; x < KonecVyrezuX; x++){
                                for(int y = ZacY; y < KonecVyrezuY;y++){
                                        Pixel = ObrPom.GetPixel(x,y);
                                        Obr2.SetPixel(2*x,2*y,Pixel);
                                        Obr2.SetPixel(2*x+1,2*y,Pixel);
                                        Obr2.SetPixel(2*x,2*y+1,Pixel);
                                        Obr2.SetPixel(2*x+1,2*y+1,Pixel);
                                }
                        }
                        pictureBox2.Image = Obr2;
                }
Editováno 10.5.2015 18:26
 
Odpovědět
10.5.2015 18:25
Avatar
Odpovídá na Mr. W3stik
Michael Škrášek:10.5.2015 18:46

Musíš to mít pomocí vlastního algoritmu?
https://msdn.microsoft.com/….110%29.aspx

Nahoru Odpovědět
10.5.2015 18:46
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
Mr. W3stik
Člen
Avatar
Odpovídá na Michael Škrášek
Mr. W3stik:10.5.2015 19:05

Ano musí to být pomocí cyklu :/ a vykreslovat pixel po pixelu.

 
Nahoru Odpovědět
10.5.2015 19:05
Avatar
Odpovídá na Mr. W3stik
Michael Škrášek:10.5.2015 19:34

Co takhle?

private void Form1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawImage(image, 0, 0);
    e.Graphics.DrawImage(BiggerSize(image, 2, 2), 100, 0);
}

private Bitmap BiggerSize(Bitmap img, int w, int h)
{
    Bitmap bmp = new Bitmap(img.Width * w, img.Height * h);

    Graphics gr = Graphics.FromImage(bmp);

    for (int x = 0; x < img.Width; x++)
    {
        for (int y = 0; y < img.Height; y++)
        {
            Color pixel = img.GetPixel(x, y);
            gr.FillRectangle(new SolidBrush(pixel), x * w, y * h, w, h);
        }
    }

    return bmp;
}


private Color RandomColor()
{
    Random random = new Random(DateTime.Now.Millisecond);
    byte r = (byte)random.Next(255); Thread.Sleep(1);
    byte g = (byte)random.Next(255); Thread.Sleep(1);
    byte b = (byte)random.Next(255);
    return Color.FromArgb(r, g, b);
}

public Bitmap image
{
    get {
        Bitmap bmp = new Bitmap(100, 100);
        Graphics gr = Graphics.FromImage(bmp);
        for (int x = 0; x < 10; x++)
        {
            for (int y = 0; y < 10; y++)
            {
                gr.FillRectangle(new SolidBrush(RandomColor()), x * 10, y * 10, 10, 10);
            }
        }
        return bmp;
    }
}
Editováno 10.5.2015 19:35
Nahoru Odpovědět
10.5.2015 19:34
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
Odpovídá na Mr. W3stik
Michael Škrášek:10.5.2015 19:37

To w a h znamená kolikrát se má zvětšit šířka a výška obrázku

Nahoru Odpovědět
10.5.2015 19:37
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
Odpovídá na Mr. W3stik
Michael Škrášek:10.5.2015 19:43

Chybka :D

private void Form1_Paint(object sender, PaintEventArgs e)
{
    Bitmap bmp = image;
    e.Graphics.DrawImage(bmp, 0, 0);
    e.Graphics.DrawImage(BigerSize(bmp, 2, 2), 100, 0);
}

private Bitmap BiggerSize(Bitmap img, int w, int h)
{
    //hlavní kód
    Bitmap bmp = new Bitmap(img.Width * w, img.Height * h);

    Graphics gr = Graphics.FromImage(bmp);

    for (int x = 0; x < img.Width; x++)
    {
        for (int y = 0; y < img.Height; y++)
        {
            Color pixel = img.GetPixel(x, y);
            gr.FillRectangle(new SolidBrush(pixel), x * w, y * h, w, h);
        }
    }

    return bmp;
}


private Color RandomColor()
{
    Random random = new Random(DateTime.Now.Millisecond);
    byte r = (byte)random.Next(255); Thread.Sleep(1);
    byte g = (byte)random.Next(255); Thread.Sleep(1);
    byte b = (byte)random.Next(255);
    return Color.FromArgb(r, g, b);
}

private Bitmap image
{
    get {
        Bitmap bmp = new Bitmap(100, 100);
        Graphics gr = Graphics.FromImage(bmp);
        for (int x = 0; x < 10; x++)
        {
            for (int y = 0; y < 10; y++)
            {
                gr.FillRectangle(new SolidBrush(RandomColor()), x * 10, y * 10, 10, 10);
            }
        }
        return bmp;
    }
}
Nahoru Odpovědět
10.5.2015 19:43
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
Mr. W3stik
Člen
Avatar
Odpovídá na Michael Škrášek
Mr. W3stik:10.5.2015 20:24

Od té metody Color moc nechápu proč jsi to tam dělal :/ . Mohl by jsi prosím zkusit pomocí údajů, které jsou v mém kodu v události MouseMove a zkusit pouze vykreslit tu vyřízlou část zbytek bych už dokázal udělat podle tvého kodu co jsi teď posílal :)

 
Nahoru Odpovědět
10.5.2015 20:24
Avatar
Odpovídá na Mr. W3stik
Michael Škrášek:10.5.2015 21:18

ještě to ale potřebuje ošetřit ;)

private Point from = new Point(0, 0);
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    from = new Point(e.X, e.Y);
}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
    int fx, fy, sx, sy;

    if (e.X > from.X)
    {
        sx = e.X - from.X;
        fx = from.X;
    }
    else
    {
        fx = from.X - (from.X - e.X);
        sx = (from.X - e.X);

    }

    if (e.Y > from.Y)
    {
        sy = e.Y - from.Y;
        fy = from.Y;
    }
    else
    {
        fy = from.Y - (from.Y - e.Y);
        sy = (from.Y - e.Y);
    }

    Bitmap CutImage = Cut((Bitmap)pictureBox1.Image, new Point(fx, fy), new Size(sx, sy));
    pictureBox1.Image = CutImage;
}

private Bitmap Cut(Bitmap image, Point from, Size to)
{
    //oříznutí obrázku
    Bitmap bmp = new Bitmap(to.Width, to.Height);
    for (int x = 0; x < to.Width; x++)
    {
        for (int y = 0; y < to.Height; y++)
        {
            Color pixel = image.GetPixel(x + from.X, y + from.Y);
            bmp.SetPixel(x, y, pixel);
        }
    }

    return bmp;
}
Editováno 10.5.2015 21:18
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
10.5.2015 21:18
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
vodslon
Člen
Avatar
Odpovídá na Mr. W3stik
vodslon:13.5.2015 16:16

Stačí odpověd kolegy nebo to chceš ještě jednodušeji? :)

 
Nahoru Odpovědět
13.5.2015 16:16
Avatar
Mr. W3stik
Člen
Avatar
Mr. W3stik:13.5.2015 18:04

Nene odpověď stačila :) Mm teď trošku rušno ve škole tak jsem nestihl odpověďet. Moc děkuji za pomoc :)

 
Nahoru Odpovědět
13.5.2015 18:04
Avatar
vodslon
Člen
Avatar
Odpovídá na Mr. W3stik
vodslon:14.5.2015 7:58

Mě totiž mrzí, že máš za učitele stejného blba, jako jsem měl já. Ten nás učil VB stylem, že jsme se museli naučit nazpamět kod :-), takže to všem, včetně mě, strašně zhnusil. Prostě neřekl co jaká část kodu dělá, ale musel si nazpamět napsat kalkulačku, demence..

 
Nahoru Odpovědět
14.5.2015 7:58
Avatar
hanpari
Člen
Avatar
Odpovídá na vodslon
hanpari:14.5.2015 9:14

Co je to vb styl? Co tim myslis?

 
Nahoru Odpovědět
14.5.2015 9:14
Avatar
Honza
Člen
Avatar
Odpovídá na hanpari
Honza:14.5.2015 10:15

Řekl bych že ta věta byla myšlena tak, že způsob kterým učitel učil VB byl takový, že se museli učit nazpaměť kód :)

Editováno 14.5.2015 10:15
Nahoru Odpovědět
14.5.2015 10:15
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
vodslon
Člen
Avatar
Odpovídá na hanpari
vodslon:14.5.2015 11:41

Visual basic

 
Nahoru Odpovědět
14.5.2015 11:41
Avatar
vodslon
Člen
Avatar
Odpovídá na Honza
vodslon:14.5.2015 11:42

No já jsem to z toho tak pochopil, že jim to dává opsat a nic jim k tomu neřekne a nebo možná sem se potřeboval jenom vybrečet :D

 
Nahoru Odpovědět
14.5.2015 11:42
Avatar
hanpari
Člen
Avatar
Odpovídá na vodslon
hanpari:14.5.2015 12:21

No, já jsem ve vb dělal, ale kód jsem se nazpaměť neučil, potud nechápu, proč právě visual basic. Chápal bych, kdyby někdo starému VB vyčítal, že je to klikátko, ale jinak je to programovací jazyk jako každý jiný.

 
Nahoru Odpovědět
14.5.2015 12:21
Avatar
vodslon
Člen
Avatar
Odpovídá na hanpari
vodslon:14.5.2015 13:16

Myslím, že si nerozumím, já jsem neříkal nic proti VB, ale proti učiteli, který mě ho na SŠ učil a to stylem, že nám dal A4 kod a naučit nazpamět nebo velmi podobným stylem.

 
Nahoru Odpovědět
14.5.2015 13:16
Avatar
dirtyjobs
Člen
Avatar
Odpovídá na vodslon
dirtyjobs:14.5.2015 15:14

Měl jsi mu říct, že v Bohnicích se uvolnilo jedno lukrativní místo.

 
Nahoru Odpovědět
14.5.2015 15:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 18 zpráv z 18.