Új hozzászólás Aktív témák
-
martonx
veterán
-
DrojDtroll
addikt
válasz DrojDtroll #8292 üzenetére
Ezt a problémát megoldottam úgy hogy csináltam egy osztály ami egyetlen color field-et tartalmaz.
Most a serializációval küszködök.
A Class amit el kellene menteni.
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
namespace raw_data
{
[Serializable]
public class ColorPalette : Data.ISeriazable
{
private List<Imaging.RefColor> _colorList;
public string SerializedName { get; set; }
public ColorPalette()
{
ColorList = new List<Imaging.RefColor>();
ColorList.Add(new Imaging.RefColor(Settings.ColorPalette.Default.DefaultMin));
ColorList.Add(new Imaging.RefColor(Settings.ColorPalette.Default.DefaultMax));
SerializedName = Settings.Folder.Default.ColorPalette + Path.AltDirectorySeparatorChar + System.IO.Directory.GetFiles(Settings.Folder.Default.ColorPalette).Length;
}
public List<Imaging.RefColor> ColorList { get => _colorList; set => _colorList = value; }
public Lut lut { get; set; }
public string GetSerializedName()
{
return SerializedName;
}
}
}A serializálást végző függvény:
public static void SerializeObject(Data.ISeriazable obj)
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(obj.GetSerializedName(),
FileMode.Create,
FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
}A visszatöltés metódusa
internal static void LoadSerializedPalettes(GroupBox colorPaletteGroupBox)
{
string[] serializedfilenames=Directory.GetFiles(Settings.Folder.Default.ColorPalette);
foreach (var item in serializedfilenames)
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(item,
FileMode.Open,
FileAccess.Read,
FileShare.Read);
ColorPalette cp = (ColorPalette)formatter.Deserialize(stream);
stream.Close();
ColorPaletteSettings.ColorPaletteList.Add(cp);
AddNewPalatte(colorPaletteGroupBox, cp);
}
}Nem töltődnek rendesen vissza az objektumok. A stream még rendesen megvan. Debugban látom, hogy a hossza olyan mint amilyennek lennie kell.
Mitől lehet, hogy mégis null-t kapok?
-
válasz DrojDtroll #8293 üzenetére
Mit is szeretnél megoldani?
-
BTminishop
aktív tag
válasz DrojDtroll #8303 üzenetére
Az én ötletem az lenne, hogy a kezdőpont meghatározása után az egér pozícióját lekérdezni és azokat a pontokat befesteni a megfelelő színre, ezzel ugye csak az a gond, hogy globális koordinátákról van szó - tehát az egész ablakról nem konkrétan a négyzetről de ezt valahogy csak meglehet oldani.
[ Szerkesztve ]
-
BTminishop
aktív tag
válasz DrojDtroll #8305 üzenetére
Akkor mi is a probléma?
-
vlevi
nagyúr
válasz DrojDtroll #8307 üzenetére
Nem ástam bele magam C#-ban a kép kezelésbe, de egy tippem lenne, használj egy másik, átlátszó képet az eredeti fölött. Kábé, mint egy új layert. Ezen rajzold a vonalat, és csak ezt a képet frissítsd. Amikor a felhasználó befejezi a rajzolást, elég akkor rátenni véglegesen az eredeti képre a vonalat.
u.i.: Elindítottam a VS-t, és úgy látom, a pictureboxnak van Image, és BackgroundImage propertyje. Szerintem érdemes kipróbálni, hogy a "rendes" képed a backgroundimage-ben van, és a rajzolást az image-ben csinálod, és amikor készen van, akkor bemásolod az image-be.
Vagy, nem is kell bemásolni, mert, csak egy vonalat kell rá húzni. -
lord.lakli
őstag
válasz DrojDtroll #8309 üzenetére
Miért nem dobod el az egész "képet"?
-
martonx
veterán
válasz DrojDtroll #8312 üzenetére
Lehet, hogy paraszt vagyok, de ha megdebuggolod, akkor biztosan látni fogod, hogy mi történik.
Én kérek elnézést!
-
cattus
őstag
válasz DrojDtroll #8312 üzenetére
Tippre azért, mert a Hover esemény csak akkor sül el, amikor a kurzor az adott elemen kívülről az adott elemen belülre kerül (ráhúzod), nem pedig azt, hogy az adott elemre kattintott-e az egérgombbal. Felteszem az a szándékod, hogy a pictureBox-on történő egérkattintást kezeld. Ez esetben, ha van neki _Clicked függvénye akkor azt implementáld, vagy ha nincs, akkor tedd bele egy olyan konténerbe, aminek van. Vagy feliratkozhatsz az egér eseményére is és nézheted, hogy éppen az adott elemen belül van-e, de ez talán a leginkább kerülendő megoldás.
Do the thing!
-
válasz DrojDtroll #8435 üzenetére
https://stackoverflow.com/questions/878937/unit-testing-float-operations-in-visual-studio-2008-pro
Legtöbb lib-nek van hasonlója:
Assert.AreEqual(float expected, float actual, float tolerance);
-
martonx
veterán
válasz DrojDtroll #8441 üzenetére
Tényleg van értelme feltalálnod a spanyol viaszt?
Én kérek elnézést!
-
sztanozs
veterán
válasz DrojDtroll #8443 üzenetére
Milyen eszköz ez? Nincs már rá valami shell, biztos neked kell megírni?
Ha korlátozott tudású a cucc (pl minimális memória), akkor nem biztos, hogy egyáltalán megéri rá parancsértelmezőt írni.JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
válasz DrojDtroll #8461 üzenetére
Ha .NET-ben programozható, akkor PowerShell-el simán meg tudod eztr csinálni.
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
amargo
addikt
válasz DrojDtroll #8481 üzenetére
Használok, a kezdetektől. Szerintem elfér itt.
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
martonx
veterán
válasz DrojDtroll #8483 üzenetére
Tudtommal nincs méretkorlát, viszont ezek nem tudom milyen fileok, de sose jó gyakorlat DB backupoktól kezdve minden szart a kód repositorykban tartani.
Én kérek elnézést!
-
amargo
addikt
válasz DrojDtroll #8483 üzenetére
Hova akarsz fájlokat feltölteni ez nekem nem tiszta és mik ezek a munkafájlok, ha tudsz róla valami közérdekűt írni? Mert a forrás fájloknak is megvan a maguk hely és a nagyobb méretű Artifact-oknak is, én magát a munkafájlokat inkább az utóbbiba tudnám sorolni, ezért evvel kellene inkább megismerkedni szerintem.
Amúgy 10GB a limit (Git esetén) és itt is Artifact-ot ajánlanak, többek között.
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
nagyúr
válasz DrojDtroll #8486 üzenetére
És ha db-ben lenne tárolva?
-
vlevi
nagyúr
válasz DrojDtroll #8486 üzenetére
"Egy mérési fájl így 8MB"
Gzip
Persze lehet, hogy nem lesz sokkal kisebb, és az is lehet, hogy a nagyságrendeken nem változtat, de láttam már olyat, hogy volt, amit a zip, rar, vagy egyéb, veszteségmentes tömörítések a tizedére, vagy még kisebbre össze tudták rántani. -
sztanozs
veterán
válasz DrojDtroll #8490 üzenetére
Lehet érdemes lenne berakni egy 2048x2048 image-be mint 16-bites bitmap-et és ráereszteni valami veszteségmentes képtömörítést. Lehet, hogy jobban tömörítene, mint egy zip.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
bazsy1981
tag
válasz DrojDtroll #8498 üzenetére
Nem, az openfiledialogRÓL húzunk át egy file-t, egy 3d tervező programba. És ennek a filenak az elérési útvonala kellene nekem egy változóba. Ha kijelöli és rányom a megnyitás gombra akkor ez meg is történik.
Itt ezt a fölösleges kattintást akarnánk megspórolni, hogy valahogy a Drag&Drop esemény hatására történjen a dolog, ne csak a megnyitás gomb hatására.Hiteles épületenergetikai tanúsítvány készítése rövid határidővel! [www.energetikatb.hu]
-
nagyúr
válasz DrojDtroll #8509 üzenetére
Statikus metódusokat nem lehet örököltetni vagy felülírni, így nem lehet abstract sem. A statikus metódus a típuson van definiálva és nem az osztály egy példányán.
-
Alexios
veterán
válasz DrojDtroll #8509 üzenetére
absztrakt osztály esetleg, itt az ososztaly tartalmazhat statikus metodusokat, de ezeket nem fogod tudni felulirni egy származtatott osztályban, mivel a statikus metódus nem példány hanem típushoz van kötve- azaz c#-ban nincs olyan hogy abstract static vagy virtual static
-
válasz DrojDtroll #8509 üzenetére
Miért kell neked static?
-
Alexios
veterán
válasz DrojDtroll #8513 üzenetére
Na de ha ez egy típushoz tartozó, statikus dolog, akkor miért akarnád eleve interface-be rakni, hogy más is megvalósítsa - azt ami egy kifejezetten X típushoz tartozik?
Szerintem, mikor ilyen igények lépnek fel, ott valószínűleg eleve érdekes a kód is már. -
őstag
-
válasz DrojDtroll #8513 üzenetére
Kíváncsi lennék erre a felépítésre, mert valami biztosan nem kerek.
Írhatsz extension methodokat, hogy kényelmesebb legyen használni bizonyos interface-ekre, amennyiben valóban utility jellegű ez a static valami most.
-
martonx
veterán
-
martonx
veterán
-
petyus_
senior tag
válasz DrojDtroll #8543 üzenetére
Debug módban futtatod, ezért hiába kezeled le, a vs akkor is megáll, hogy megmutassa az exceptiont. Indítsd ctrl+F5-tel, akkor nem fog megállni. Illetve be lehet állítani, hogy a kezelt exceptionöknél ne álljon meg, de most nincs előttem, úgyhogy nem tudom megmondani hol .
-
cattus
őstag
-
nagyúr
válasz DrojDtroll #8703 üzenetére
Git
-
martonx
veterán
válasz DrojDtroll #8805 üzenetére
Nyilván nem, de kismillió dokumentáció, tutorial van hozzá, nagyobb szégyen hülyeséget kérdezni, mint szó nélkül utána olvasni.
Én kérek elnézést!
-
Chesterfield
senior tag
válasz DrojDtroll #8805 üzenetére
-
MODERÁTOR
válasz DrojDtroll #8807 üzenetére
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
MODERÁTOR
válasz DrojDtroll #8852 üzenetére
Csak az értékére lennél kíváncsi? Immediate window?
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
MODERÁTOR
válasz DrojDtroll #8854 üzenetére
Ott konkrétan be tudod gépenlni és szépen egyesével legetteled az értékeket. Jobb ötletem hirtelen nincsen, vagy 5 éve nem használok már VS-t
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
martonx
veterán
válasz DrojDtroll #8852 üzenetére
Használd a Watch window-t, ha csak konkrét értékre vagy kíváncsi.
Én kérek elnézést!
-
dqdb
nagyúr
válasz DrojDtroll #9219 üzenetére
Ne a rendszerben található, .NET Frameworkhöz tartozó dll-t add hozzá referenciaként, hanem ezt a NuGet csomagot.
tAm6DAHNIbRMzSEARWxtZW50ZW0gdmFka5RydIJ6bmkuDQoNClOBc4Ek
-
DrojDtroll
addikt
válasz DrojDtroll #9225 üzenetére
A HorizontalAlignment property nélkül tökéletes középen van.
MÁS:
Van itt olyan forumtárs aki annó fejlesztett windows 8-as vagy 8.1-es telefonra? -
Alexios
veterán
válasz DrojDtroll #9226 üzenetére
Én fejlesztettem még rá régen, bár túl sok minden nem rémlik már belőle
-
válasz DrojDtroll #9331 üzenetére
Nincs időm kipróbálni, de nekem egyáltalán nem szimpatikus egy ilyen nagy fájlnak a mini adagokban való szekvenciális olvasgatása.
1, Miért nem a sima stream Read metódussal olvasol azonnal byte[] tömbbe?
2, Én megpróbálnám a bufferméreteket manuálisan feljebb húzni. Alapból csak valami ici-pici bufferekkel dolgozik. (nekem pár 10KB rémlik)
3, Nem mintha itt számítania kellene de te itt ugye 4M elemen iterálsz át egy szoros for () ciklusban => ha nem fájlműveletet végeznél, akkor már ez is bizonyos helyzetekben indokolatlanul lassú (4M tömbhatár ellenőrzés az indexerekre+ ellenőrzés az iterátoron, szerk: mondjuk 4M az még nem túl sok..)
(4, miért int tömbben-ben tárolod a short értékeidet?)5, a két kód ránézésre nem ugyanazt csinálja. a második konkrétan elcseszettnek tűnik.
64bitenként olvasol és ugyanúgy 4M-szor mint amikor 16 bitenként olvastál????[ Szerkesztve ]
-
válasz DrojDtroll #9331 üzenetére
for (int i = 0; i < heigth; i++)
{
for (int j = 0; j < width; j++)
{
result[j, i] = reader.ReadUInt16();
}
}
Itt van még egy olyan probléma (mindkét példádban), hogy úgy iterálsz át egy nagy többdimenziós tömbön, hogy a belső ciklusod nem a tömb legjobboldalibb dimenzióján iterál.
C#-ban a többdimenziós tömbök (A[,,,]) row-major ként vannak a memóriában, tehát a legjobb oldalibb dimenzió egymás melletti elemei a memóriában egymás mellett lesznek. az A[100, 50] elem mellett az A[100,51] elem van. Ezzel szemben az A[101,50] az teljesen máshol van, a te esetedben (2048) elemmel később mint az A[100,50], tehát mivel int tömbről van szó, 8KB-tal később van. Az hogy itt csak írsz és nem olvasol kb mindegy, mert nyilván egy egész cache line lesz írva/olvasva.
A helyzeten cache-line szempontből még (valószínűleg) tovább ront itt, hogy kettő hatványonként iterálsz. ilyen problémák nagy mátrixok szorzásánál vannak
[ Szerkesztve ]
-
válasz DrojDtroll #9334 üzenetére
Igen, én is észrevettem, de szvsz nem a forrásadatokkal van a probléma, hanem a két metódusod nem ugyanazt a bytesorrendet használja, tehát a tömbök tartalma amelyeket visszaadnak sem ugyanaz lesz.
Amikor a második metódusban streamből beolvasol egy ulongot, akkor a ReadUInt64() figyelembe veszi az x86 bytesorrendjét: a változónak a kisebb helyiértékű byteja van alacsonyabb címen (little endian). Ha a streamed sorrendben ezeket a byteoket tartalmazza:
1, 0x01; 2, 0x02; 3; 0x03; 4, 0x04; 5; 0x05; 6, 0x06; 7, 0x07;8, 0x08;akkor a kiolvasott ulong értéke az 0x08'07'06'05'04'03'02'01 lesz, szemben azzal a sorrenddel amit a fileban látsz.
Ha ezt a részt fordított sorrendbe raknád, akkor pont ugyanazt a tömböt adná vissza a kettő metódusod.
result[++j, i] = (ushort)(r >> 48);
result[++j, i] = (ushort)(r >> 32);
result[++j, i] = (ushort)(r >> 16);
result[++j, i] = (ushort)r;
[ Szerkesztve ]
-
válasz DrojDtroll #9337 üzenetére
public static int[,] Get4mIntArrBufferedSpan(string fileName)
{
var sw = new Stopwatch();
uint heigth = 2048;
uint width = heigth;
var result = new int[heigth, width];
var buffSize = sizeof(ushort) * heigth;
var buff = new byte[buffSize];
using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None, bufferSize: 1024 * 1024))
{
sw.Start();
for (int w = 0; w < width; w++)
{
int chunk = 0;
while (chunk < buffSize)
chunk += fs.Read(buff, chunk, (int)buffSize - chunk);
var shortArr = MemoryMarshal.Cast<byte, ushort>(buff);
for (int h = 0; h < heigth; h++)
result[h, w] = shortArr[h];
}
sw.Stop();
Console.WriteLine($"{nameof(Get4mIntArrBufferedSpan)} took {sw.ElapsedMilliseconds}ms");
}
return result;
}
Nekem a fenti kód pontosan ugyanazt az eredmény tömböt dobja ki mint a te első metódusod. A különbség annyi, hogy a itt while ciklus megpróbál egyszerre 4096byteot (2048db ushort) kiolvasni a streamből, a kiolvasott byte tömböt castolja ushort-tömbre azzal pedig feltölti egy oszlopodat.
Szóval itt is rossz a tömb bejárási sorrendje, de a Stream.Read() metódus úgy tűnik, hogy ennyivel hatékonyabb, mint egyenként ushortokat olvasgatni. (nálam pontosan duplázódott a sebesség)
A fenti kódban ha a mátrix bejárási sorrendje "normalizálódna" akkor további 3x lenne gyorsabb. ==> tehát igen, itt a processzor fogja vissza a fájlműveletet
Ebben az esetben lenne értelme egyszerre 2048db elemnél többet is olvasni. Az még dobna rajta.
[ Szerkesztve ]
-
válasz DrojDtroll #9398 üzenetére
FormatException? esetleg az alkalmazás definiálhatja a saját típusait...
[ Szerkesztve ]
-
fatal`
titán
válasz DrojDtroll #9398 üzenetére
FormatException vagy ConfigurationErrorsException (ezt inkább hiányzó config paraméternél tenném, ha nem lehet értelmes defaultot adni)
[ Szerkesztve ]
-
Atomantiii
őstag
válasz DrojDtroll #9479 üzenetére
Akkor nekifutok még egyszer. Van egy windows forms app-om (.net frameworkos)
Szeretnék egy menühöz elemeket hozzáadni, pl most 2021-ben jelenjen meg az adott menüben 2021. Jövőre jelenjen meg ugyanabban a menüpontban 2021 helyett 2022.
Tehát a 0 helyett idén 2021 jelenleg meg, jövőre meg 2022, attól függ melyik évben vagyunk.Ekkor a form1.designer.cs-ben ez jelenik meg:
this.toolStripMenuItem3.Text = "0";
Ha ide beírom, az alábbi sort, akkor megjelenik a 0 helyett 2021 a menüben.
this.toolStripMenuItem3.Text = System.DateTime.Today.AddYears(0).ToString("yyyy");Ha a form1.designer.cs-ről átváltok form1.cs[design]-ra és ott mondjuk adok még hozzá menüket és utána visszaváltok form1.designer.cs-re, hogy az újaknak is megadjam a System.DateTime.Today.AddYears dolgait akkor azt látom, hogy a korábban beírt this.toolStripMenuItem3.Text = System.DateTime.Today.AddYears(0).ToString("yyyy"); helyett visszaírja ezt: this.toolStripMenuItem3.Text = "2021";
Vagy ez van olyan okos, hogy jövőre ide 2022-őt fog írni?
-
disy68
aktív tag
válasz DrojDtroll #9488 üzenetére
komponens tesztek, integrációs tesztek, end-to-end tesztek és opcionális manuál tesztelés a scope-tól függően
“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude
-
nagyúr
válasz DrojDtroll #9488 üzenetére
Igen, úgy hívják a tool-t hogy unit teszt.
Tehát a refaktorálás előtt megírod a unit teszteket ha nincsenek, majd refaktorálsz és ellenőrzöd hogy továbbra is jók-e a tesztek.
-
Alexios
veterán
válasz DrojDtroll #9488 üzenetére
Unit/egyéb tesztek ahogy korábban is írták, ajánlott olvasmány: [link]
[ Szerkesztve ]
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!