Diskuze: Volání obrázků z listu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 36 zpráv z 36.
//= 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.
Kód je určitě správně, toto je ukázka z MSDN dokumentace:
public void DrawImagePoint(PaintEventArgs e)
{
// Create image.
Image newImage = Image.FromFile("SampImag.jpg");
// Create Point for upper-left corner of image.
Point ulCorner = new Point( 100, 100);
// Draw image to screen.
e.Graphics.DrawImage(newImage, ulCorner);
}
To přetypování je tam zbytečné, List je generická kolekce. Nevidím tam chybu, zkus nějaký Image vytvořit přímo v té metodě, jako je v té ukázce, jeslti to půjde nebo ne.
Zkus toto:
private List<Image> karty = new List<Image>();
private void naplnList(int index = 0)
{
karty.Add(Image.FromFile(@"images\" + index + ".png"));
if (karty.Count - 1 > index)
naplnList(index + 1);
}
Z toho vyplývá, že karty máš pojmenované 1.png, 2.png... - je to tak?
Pardon - toto je správně... :[
private void naplnList(int index = 0)
{
karty.Add(Image.FromFile(@"images\" + index + ".png"));
if (karty.Count - 1 < 31)
naplnList(index + 1);
}
Karet je 32, proto ten cyklus, nebylo na něm nic špatně. Spíš mi připadá, jestli má ty obrázky ve složce s programem.
private void naplnList(int index = 0)
{
karty.Add(Image.FromFile(@"images\" + index + ".png"));
if (karty.Count < 30)
naplnList(index + 1);
}
Pardon - to nahoře smaž - omlouvám se...
No já vidím problém v cestě k souboru - to je největší kámen úrazu - ať si ji vyjede... Rekurze je dle mého názoru lepší, než cyklus...
Nevím proč tu spamuješ takové hloupost, chce přidat 32 obrázků tak udělá for cyklus od 0 do 31. Nevidím tu nic na řešení.
Složka images by měla být ve složce bin/debug. Jeslti ji má v projektu, tak možná proto to nefunguje.
Ne to není, už jen proto, že lidé rekurzivně nemyslí, nebudu ji cpát někam, kde to nedává smysl. Někdy se hodí, ale těch případů tolik není. Navíc ti pak ty metody visí v zásobníku, což je její nevýhoda.
Však proto píši, že vidím problém v cestě k souboru... A´t napíše, kde má tu složku images...
Snažil jsem se sesmolit rekurzi...
Ale visí, čeká se na její dokončení, to je podmíněné dalším voláním, pak dalším a dalším. Se na to podívej pořádně.
Aha... Index máš ve
formátu 0, 1, 2 - ne 00, 01, 02... přepiš ty obrázky bez dorovnání
nulou... A nemusíš detekovat aktuální adresář - jen:
images\...
Tedy bude to:
karty.Add(Image.FromFile(@"images\" + index + ".bmp"));
Jen nevím, proč jsi konvertoval do bmp - je zbytečně náročný - a ztrátový... Png je lepší volba.
00 ti nepůjde, když načítáš jen 0. Si tam dej podmínku že pokud je i < 10 tak to tma přidá nulu.
Ale kde přesně je problém - neexistuje index (Image s tímto indexem má hodnotu null)?
V tom listu očividně nejsou obrázky. Pročti si komentáře výše,
projeď si to pole a přijdeš na to, kde je problém
Posílal jsem ti, jak to je správně a máš to správně, jen to přetypování tam je zbytečné. Opravil jsi ty 00? Zkoušel jsi nahrát obrázek přímo v metodě jak jsem ti psal?
Toto je OK:
kp.DrawImage(karty[index], x, y);
(měl jsi tam zbytečně konverci do Image)
Takže problém může být jen v listu karet - hdil bys to na https://gist.github.com/ (celý program)?
Jsou - jen ne ty dorovnané nulou - takže to je zavádějící...
Index 0 tam bude vždy... Jen nebude mít obrázek 01 - ale až 10... Index 0 by měl tedy být OK...
Ale vyřešil bych to jako já Lonesure - podívej se na něj - najdeš ho v mém profilu. Totiž porovnávat obrázky nejde, takže toto mi přijde jako blbost. Já to vyřešil tak, že určité hodnotě jsem přiřadil obrázek - ale pracoval jsem s čísly - ne s obrázky - obrázek se vykreslil až jako poslední prvek - jen vyobrazení logického výpočtu...
Ach jo, Matěji, raději si dvakrát rozmysli co chceš napsat místo psaní 5ti příspěvků pod sebe s nulovou informační hodnotou. Zbytečně to tu dělá nepořádek a lidi to mate.
Chyba zde byla v pojmenování obrázků. Pokud je tam i další, ukáže se, když Preedy využije mé ukázky kterou jsem mu poslal hned na začátku a vloží obrázek přímo do metody Draw, to zatím neudělal, nemůžeme mu tedy dále pomoci, dokud nenapíše. Proto nebudeme psát 50 příspěvků s výkřiky, čím by to mohlo nebo nemohlo být. Opravdu bych byl rád, kdyby ta diskuze tady měla trochu úroveň.
No podívej se na ten můj program - mám tam vyřešené otočení první a druhé karty - jen jejich porovnávání bude jiné - tobě nepůjde o schodu, protože neděláš pexeso, ale myslím, že ti to dost pomůže...
Šlo mi o to, že já tam mám pole picture boxů - to bys vypustil a udělal to jak to mám já, s tím, že bys udělal switch pro jedotlivé hodnoty - takže ne - neměl byst list obrázků - ale ten switch. A pracoval bys s polem čísel... Něco jako:
int number;
switch (index)
{
case 0:
number = 0;
break;
case 1:
number = 1;
case 2:
...
}
karty.Add(Image.FromFile(@"images\" + number + ".png"));
Jen toto bys změnil a jinak bs mohl použít můj program...
Já zase blbnu - omlouvám se:
switch (index)
{
case 0:
number = 0;
break;
case 1:
number = 1;
case 2:
...
}
kp.DrawImage(Image.FormFile(@"images\" + number + ".bmp"), x, y);
To si snad děláš legraci Tohle je jedna z nejhorších věcí, co jsem kdy viděl.
Tady to vede do pekel, zavíráme. Preedyho kód byl v pořádku, jen neměl ošetřená ty jména. Hned jako 2 příspěvek jsem mu poslal ukázku zobrazení obrázku, ptal jsem se ho několikrát jestli to zxkoušel, žádná odpověď. Cyklus je naprosto v pořádku, list je naprosto v pořádku.
matesax: Tohle je fakt na ban, zamysli se prosím nad sebou, rekurze je naprostá blbost, o tom switchi ani nemluvím, ježí se mi vlasy na hlavě když to vidím.
Zobrazeno 36 zpráv z 36.