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.
Člen
Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Musíš to mít pomocí vlastního algoritmu?
https://msdn.microsoft.com/….110%29.aspx
Ano musí to být pomocí cyklu :/ a vykreslovat pixel po pixelu.
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;
}
}
To w a h znamená kolikrát se má zvětšit šířka a výška obrázku
Chybka
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;
}
}
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
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;
}
Stačí odpověd kolegy nebo to chceš ještě jednodušeji?
Nene odpověď stačila Mm teď trošku rušno ve škole tak jsem nestihl odpověďet. Moc děkuji za pomoc
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..
Ř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
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
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ý.
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.
Měl jsi mu říct, že v Bohnicích se uvolnilo jedno lukrativní místo.
Zobrazeno 18 zpráv z 18.