Das Manipulieren einzelner Pixel macht man tatsächlich besser mit Get- und Setpixel, allerdings sind die Standard Methoden viel zu langsam.
Siehe auch: GetPixel und SetPixel um Längen geschlagen. 800 mal schneller
Hier ein Projekt von mir welches dir vielleicht als Beispiel dienen kann: Perlin Noise Textur Generierung
So oder so wirst du dich mit den Grundlagen der jeweiligen Plattform vertraut machen müssen ob HTML und JavaScript oder .Net Framework und C#.
Im Prinzip wurden dir die nötigen Tipps genannt um durchzustarten.
Hier nochmal kurz:
Edit: Zum Thema Performance. C# setzt zumindest bei WinForms auf die GDI+ API von Windows. Die ist mittlerweile in die Jahre gekommen und nicht das schnellste. Für die meisten Dinge reicht es allerdings noch.
Bei JavaScript hängt es stark vom Browser bzw. dessen JavaScript Engine ab. Chrome ist beispielsweise deutlich schneller als Firefox.
Wie wäre es mit JavaScript und Canvas?
Ich kann meinen Vorrednern nur zustimmen. Lerne die Basics mit deiner Ausgabe oder mit dem 2012er Openbook und anhand von kleinen Projekten.
Das Internet ist voll von Wissen zu dem Thema C# und .Net.
Wenn es spezifischer wird, kann man später immer noch zum Buch greifen oder zunächst mal fragen.
Trotzdem würde ich dir die aktuelle Version von Visual Studio empfehlen, also derzeit 2015.
Damit kannst du direkt die neuen Features von C# kennenlernen und verwenden.
Ich hatte mal Avast vor einem Upgrade drauf und danach diverse Probleme mit Windows, Lösung war es Avast zu deinstallieren und Avast dann neu zu installieren.
Ich habe vor kurzem das Update 3 RC für VS 2015 installiert.
Bisher keine Probleme, bis ich heute das Threads Fenster gebraucht habe.
Kann mir jemand sagen ob Ihr das Threads Fenster unter Debuggen-> Fenster -> Threads öffnen könnt?
(Kann man nur bei während des Debuggings öffnen).
Sobald ich es versuche zu öffnen erhalte ich:
Fehlermeldung:
"Ein Aufrufziel hat einen Ausnahmefehler verursacht."
In Projekten wo es offen wäre, steht folgende Exception drin.
Fehlermeldung:
Ausnahmedetails:
System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.ArgumentException: "PropertyMetadata" ist bereits für Typ "FrameworkElement" registriert.
bei System.Windows.DependencyProperty.ProcessOverrideMetadata(Type forType, PropertyMetadata typeMetadata, DependencyObjectType dType, PropertyMetadata baseMetadata)
bei System.Windows.DependencyProperty.OverrideMetadata(Type forType, PropertyMetadata typeMetadata)
bei Microsoft.VisualStudio.Debugger.DebuggerToolWindows.ThreadWindow.ThreadWindowControl..ctor(Boolean isInStandaloneMode)
bei Microsoft.VisualStudio.Debugger.DebuggerToolWindows.ThreadWindow.ThreadToolWindow.LoadThreadWindowControl()
bei Microsoft.VisualStudio.Debugger.DebuggerToolWindows.ThreadWindow.ThreadToolWindow..ctor()
--- Ende der internen Ausnahmestapelüberwachung ---
bei System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
bei System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
bei System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
bei System.Activator.CreateInstance(Type type, Boolean nonPublic)
bei System.Activator.CreateInstance(Type type)
bei Microsoft.VisualStudio.Shell.Package.InstantiateToolWindow(Type toolWindowType)
bei Microsoft.VisualStudio.Shell.Package.CreateToolWindow(Type toolWindowType, Int32 id, UInt32 flags)
bei Microsoft.VisualStudio.Shell.Package.CreateToolWindow(Type toolWindowType, Int32 id, ProvideToolWindowAttribute tool)
bei Microsoft.VisualStudio.Shell.Package.FindToolWindow(Type toolWindowType, Int32 id, Boolean create, ProvideToolWindowAttribute tool)
bei Microsoft.VisualStudio.Shell.Package.CreateToolWindow(Guid& toolWindowType, Int32 id)
bei Microsoft.VisualStudio.Shell.Package.Microsoft.VisualStudio.Shell.Interop.IVsToolWindowFactory.CreateToolWindow(Guid& toolWindowType, UInt32 id)
bei Microsoft.VisualStudio.Platform.WindowManagement.WindowFrame.ConstructContent()
Nein, aber weil:
Setze einfach im Timer_Tick diese Codezeile (vor der MessageBox).
so aussieht als wärst du abgelenkt worden o.ä.
Mir ist noch ein Problem in der GUI aufgefallen.
Beim Exporter kommt es wenn man ein bischen rumklickt.
Bei der Farbe u.A. wenn man Pfeiltasten Hoch und Runter verwendet.
Innerhalb dieses Projekt habe ich nun die Seite http://bitcoinreflection.com/ online genommen.
Diese zeigt ein echtzeit Kerzen-Diagramm zu den aktuellen Bitcoin Kursen, ein Orderbook und die letzten 50 Trades.
Der Download in der Menüleiste verlinkt noch auf Version 0.9.10.
Auf dem Bild sind Angular Controller und Razor Partials (Views), das können in Zukunft noch Angular Partials werden, aber das sollte noch kein Problem darstellen.
Der Hub wird in einem Service bzw. einer Factory bereitgestellt.
Im Controller binde ich mich an das on Event des Hubs und dieses Event wird pro Controller ausgeführt, immer wenn der Hub Daten sendet und damit das model nicht für die falsche View geschrieben wird muss ich diese Abfrage machen:
if (data.exchange === $attrs.exchange && data.Pair.Key === $attrs.pair) {
$scope.ticker = data;
}
Denn ansonsten wird $scope.ticker immer wieder überschrieben und habe am ende immer gleichen Wert überall drin.
Mittlerweile sieht das so aus:
'use strict';
app.controller('ExchangeController', ['$scope', 'backendHubProxy','$attrs',
function ($scope, backendHubProxy, $attrs) {
console.log('trying to connect to service');
var tickerHub = backendHubProxy(backendHubProxy.defaultServer, 'ExchangeHub');
console.log('connected to service');
$scope.tickerHub = tickerHub;
//------------------
tickerHub.on('updateTicker', function (data) {
if (data.exchange === $attrs.exchange && data.Pair.Key === $attrs.pair) {
$scope.ticker = data;
}
});
tickerHub.start().done(function () {
var args = [$attrs.exchange, $attrs.pair];
tickerHub.invoke('RequestTicker', args, function (data) { });
});
//------------------
tickerHub.on('updateTrade', function (data) {
if (data.exchange === $attrs.exchange) {
$scope.trades = data.trades;
}
});
tickerHub.start().done(function () {
var args = [$attrs.exchange, $attrs.pair];
tickerHub.invoke('RequestTrade', args, function (data) { });
});
//------------------
tickerHub.on('updateBalance', function (data) {
if (data.exchange === $attrs.exchange) {
$scope.balances = data.balances.Items;
}
});
tickerHub.start().done(function () {
var args = [$attrs.exchange, $attrs.pair];
tickerHub.invoke('RequestBalance', args, function (data) { });
});
}
]);
'use strict';
app.factory('backendHubProxy', ['$rootScope', 'backendServerUrl',
function ($rootScope, backendServerUrl) {
function backendFactory(serverUrl, hubName) {
var connection = $.hubConnection(backendServerUrl);
var proxy = connection.createHubProxy(hubName);
var hubStart = null;
var hub = {
on: function (eventName, callback) {
proxy.on(eventName, function (result) {
$rootScope.$evalAsync(function () {
if (callback) {
callback(result);
}
});
});
},
invoke: function (methodName, args, callback) {
proxy.invoke.apply(proxy, $.merge([methodName], args))
.done(function (result) {
$rootScope.$evalAsync(function () {
if (callback) {
callback(result);
}
});
});
},
start: function () {
if (hubStart === null) {
hubStart = connection.start();
}
return hubStart;
}
};
return hub;
};
return backendFactory;
}]);
Nach langem rumprobieren und erklären, denke ich, verstehe ich mittlerweile, wo ich anpacken muss.
Ich werde das später nochmal durchgehen.
Danke für deine Anregungen.
Das Grundproblem ist, dass das Model im Controller überschrieben wird, wenn ich die Abfrage mit
if (data.id === $attrs.exchange)
nicht drin habe, da das event logischerweise pro Instanziierung des Controllers gefeuert wird.
Ich bin derzeit darauf angewiesen die Daten mit data-exchange="@Model.Id" data-pair="@Model.Pair.Key" im vorraus mit zu übergeben. Die ja dann im $attrs zu finden sind.
Im Anhang noch ein Bild.
Wenn die Erklärung noch nicht reicht, versuche ich das mal in einem minimal Beispiel zusammenzufassen 😉
Ich habe eine View die mehrfach auf einer Seite angezeigt werden kann.
Zudem habe ich ein Angular Controller der sich um diese View kümmern soll.
Meine Merkmale sind die @Model.Id und @Model.Pair.Key. Die kann ich auch dem Hub übergeben und bekomme die entsprechenden Daten, aber wie bekomme ich die Daten in models.ticker nur für die entsprechende View?
Ich verwende die $attrs um die Parameter im vorraus festzulegen und die Lösung funktioniert zwar, erscheint mir aber nicht sehr elegant.
Zudem muss ich die Daten derzeit Serverseitig zyklisch bereitstellen. Aber das ist ein anderes Problem.
Gibt es da eine bessere Lösung?
@using IntTrader.API;
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<IntTrader.Web.Model.ExchangeModel>
<div class="col-xs-4 col-sm-2 placeholder" ng-controller="ExchangeController" data-exchange="@Model.Id" data-pair="@Model.Pair.Key">
<h3 class="blue"><a href="/markets/@Model.Name.ToLower()">@Model.Name</a></h3>
<div class="modal-title" ng-model="models.ticker">{{models.ticker.lastPrice}}</div>
<div class="center-block">
<table class="trades" id="trades-@Model.Id"></table>
</div>
</div>
'use strict';
app.controller('ExchangeController', ['$scope', 'backendHubProxy','$attrs',
function ($scope, backendHubProxy, $attrs) {
console.log('trying to connect to service');
var tickerHub = backendHubProxy(backendHubProxy.defaultServer, 'TickerHub');
console.log('connected to service');
$scope.tickerHub = tickerHub;
tickerHub.on('update', function(data) {
console.log($scope.exchange);
if (data.id === $attrs.exchange){
$scope.models = {
ticker: data
};
}
});
}
]);
'use strict';
app.factory('backendHubProxy', ['$rootScope', 'backendServerUrl',
function ($rootScope, backendServerUrl) {
function backendFactory(serverUrl, hubName) {
var connection = $.hubConnection(backendServerUrl);
var proxy = connection.createHubProxy(hubName);
connection.start().done(function () { });
var hub = {
on: function(eventName, callback) {
proxy.on(eventName, function(result) {
$rootScope.$apply(function() {
if (callback) {
callback(result);
}
});
});
},
invoke: function(methodName, p1, p2, callback) {
proxy.invoke(methodName, p1, p2)
.done(function(result) {
$rootScope.$apply(function() {
if (callback) {
callback(result);
}
});
});
}
};
return hub;
};
return backendFactory;
}]);
Kann ich bestätigen, habe das gleiche Phänomen.
Du kannst einfach alle Buttons auf die gleiche Methode binden. Auch im Designer, dazu musst du lediglich die entsprechende Methode bei dem Event auswählen.
Hast du denn das Zielframework auf mindestens Net 4.5 umgestellt?
Würde mich der Frage erweitert anschließen:
Frage nun:
Kann ich wie in dem vorangegangen Ansatz nicht nur das gerade aktive Fenster sondern auch die innerhalb von VS gerade aktive Datei auf irgendeine Weise eroieren.
Da solltest du wohl eher das Visual Studio SDK und dessen Doku konsultieren 😃
Hallo zusammen,
Diesmal wieder ein größeres Projekt.
Es handelt sich dabei um eine API die diverse Cryptocurrency Markt APIs unter einer zusammenführen soll.
Das ganze befindet sich stark in Entwicklung und ist in mehrere Module aufgeteilt.
IntTrader.API welche die eigentlich Abstraktion der Märkte darstellt. Derzeit teilweise implementiert sind Bitfinex.com und Kraken.com
Der IntTrader ist die Referenz Implementation der API in Form einer WPF Desktop Anwendung und mit IntTrader.Web ist eine Web Plattform auf Nancy Basis (Razor, MVC) in Entwicklung.
Den Fokus werde ich nun mehr auf die Web Anwendung legen, um Plattform unabhängiger zu bleiben.
Das Projekt liegt auf GitHub: https://github.com/Zicore/IntTrader und wie der Client aussieht kann man entweder dort sehen oder hier im Anhang.
Wer sich beteiligen möchte kann das gerne über GitHub machen oder mit mir in Kontakt treten.
Ziel des ganzen ist es eine Trading Plattform zu schaffen, bei der man mit einem Login an verschiedenen Märkten handeln kann.
Technologien: C#, .Net 4.5, WPF, Json, Nancy, Razor, CoffeeScript, HTML5, Bootstrap, SignalR, jQuery
Deinen Dialog musst du aus dem UI Thread erstellen und der Background worker müsste sich um die Arbeit im Hintergrund kümmern.
Selbst wenn der User darauf warten muss, darf kein Thread den UI Thread blockieren.
Du scheinst den Dialog aus dem Background Worker Thread zu starten, das wird nicht funktionieren.
Fenster -> Neues Fenster.
Ich denke dazu musst du zunächst Zeichnen und dann Skalieren.
Ab sofort Open Source: https://github.com/Zicore/NoiseTools
Typisches Verhalten von Antiviren Programmen wie Avast. Prüft dein Programm in einer Sandbox und wenn es nichts feststellt, startet es das Programm wie gewohnt.
Hallo lazy,
naja so schwer was zu finden ist das jetzt nicht: Doing a NotifyIcon program the right way
Stichwort: ApplicationContext
Grüße
André
Hallo neo,
prüf mal ob es an der Byte-Reihenfolge liegen kann. Eventuell beim Encoden des Strings.
André
Hallo Movementroboter,
das ganze habe ich, glaube ich, schonmal beantwortet.
Der Ladebalken wird animiert, das heißt es ist nicht sofort sichtbar wie viel Prozent er anzeigt.
Das kannst du ja leicht prüfen.
Grüße
André
Das ist ja der Punkt, es muss eben nicht jeder die komplette Blockchain auf seinem Rechner haben.
Es reicht wenn es genügend Full Nodes gibt um das Netzwerk am Leben zu halten.
Soweit ich weiß, war es laut dem Paper von Satoshi Nakamoto nicht geplant das jeder Client die komplette Blockchain synchronisiert.
Wichtig aber, ist das die Miner mit steigenden Anforderungen schritthalten und das wird schätzungsweise noch lange der Fall sein.
Die Bandbreite bringt auch nur Probleme wenn viele gleichzeitige Transaktionen durchgeführt werden.
Mir fehlt leider die Zeit um die Informationen detailierter zusammenzufassen.
Hallo,
natürlich gibt es Risiken, wie überall.
Die Community hinter Bitcoin ist allerdings schon so riesig, dass eine Lücke m.E. entweder schnell gefunden werden würde oder aber schnell behoben werden würde.
Erst kürzlich hatte ein Miningpool bedrohliche 45% an Hashingpower erreicht.
Die Reaktionen in der Community waren super, viele haben sofort reagiert auf die Gefahren hingewiesen und den Pool gewechselt. Sogar der Poolbetreiber hat verlauten lassen die 51% auf jedenfall zu verhindern.
Niemand kann vorhersehen ob es in Zukunft zu Problemen kommen wird, da heißt es einfach abwarten und die Lage im Auge behalten.
Jeder muss selbst bewerten ob das Risiko tragbar ist.
Hier noch was zur Skalierbarkeit: Bitcoin Wiki Scalability
Momentan gibts Anhörungen in New York: Department of Financial Services (NYDFS Public Hearing on Virtual Currencies)
Hier mal eine schöne Übersicht der aktiven Nodes: http://getaddr.bitnodes.io/
Hallo herbivore,
die Idee ist es, das in Zukunft nur noch die Miner die Blockchain vorhalten müssen und Clients lediglich einen Teil, also gewisse Headerinformationen benötigen.
Es gibt bereits einige Light Clients die über entfernte Full-Nodes kommunizieren und somit den Client entlasten.
Zudem gibt es oder zumindest gab es bis vor kurzem noch eine Beschränkung, die dafür sorgt, dass die Blockchain nur Linear wachsen darf damit die Blockchain sich nicht zu sehr aufbläht, bevor das Netzwerk es verkraften kann.
Hier noch ein Thread dazu: Blockchain size, exponential growth
Hallo zusammen,
ich beschäftige mich seit anfang 2013 mit dem Bitcoin und wenn man erstmal alles verstanden hat und es klick gemacht hat, sieht man was für Auswirkungen der Bitcoin haben kann.
Selbst wenn der Bitcoin sich nicht durchsetzt, die Technologie dahinter wird bleiben und weiter entwickelt und in irgendeinerweise in unsere Welt einfliessen.
Volatilität ist in dieser Phase halte ich für völlig normal.
Probleme mit der wachsenden Blockchain sind auch im Fokus der Entwickler und es gibt bereits einige Ansätze das zu lösen. (Could blockchain compression/pruning lead Bitcoin to its demise?)
Das Early Adopter am meisten von einer neuen Technologie profitieren ist auch normal, aber das ganze deshalb als Pyramidensystem zu bezeichenen ist falsch. Denn selbst wenn die großen aussteigen und der Preis damit einbrechen würde, würde es die Technologie nicht ausser Kraft setzen, anschliessend würde sogar die Angst verschwinden das der Preis aus so einem Grund noch mal einbrechen kann.
Das Minen bringt nicht nur einen Erlös, sondern es sorgt hauptsächlich dafür das das Netz nicht angegriffen werden kann.
Leider habe ich momentan keine Zeit um alles weiter auszuführen, ich werde das ggf. mal fortsetzen.
Hallo priva80,
vermutlich ist es hiermit gelöst: Memory leak loading imagebrush - Stackoverflow
André
Hallo mdo,
die einzige, aber dafür unsaubere Lösung, die mir noch einfällt, wäre ein unsichtbares Form und damit meine ich nicht Visible = false, sondern beispielsweise ein (rahmenloses) Fenster mit der Größe von 0 * 0.
Das ist allerdings eine theoretische Überlegung und ich weiß nicht ob das funktioniert 🙂
Ansonsten musst du überlegen, das anders zu lösen, z.B. bei start der Anwendung prüfen was liegen geblieben ist und dann säubern.
André
Hallo mdo,
es durchaus möglich das MessageBox'en an der Stelle nicht mehr erstellt werden können.
Versuch es mal mit Logging, um zu prüfen ob die Events augeführt werden.
Grundsätzlich hat deine Anwendung nur eine bestimmte Zeit den Shutdown zu verzögern.
Alles danach wird gekillt, falls nicht verhindert und falls es doch verhindert wird, erscheint der tolle Dialog das die Anwendung ein Herunterfahren/Neustarten verhindert.
Edit: Hier hab ich noch was gefunden: dotnet-snippet Meldung beim Abmelden
André
Hallo Movementroboter,
bitte erstell mal ein Screenshot von dem Fehler (und wo er auftritt) und häng ihn an.
André
Hallo max1761995,
sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Du schreibst von TCP, aber verwendest UDP?
André
Hallo Bender,
wenn es nicht unbedingt Aktienkurse sein müssen, kannst du den Bitcoin Kurs (o.ä.) verwenden. Denn jeder Exchange bietet einfache, kostenlose und Daten API's zu aktuellen Kursen, Markttiefe etc. an.
André
Hallo Abt,
ich bekomme in der Tat den Wert als String:
"volume":"1.0E-8"
Daran werde ich auch nichts ändern können.
André
Hallo Zusammen,
von einer drittanbieter API erhalte ich JSON Strings und verwende für das Parsen Json.NET.
Ich habe nun meine Klasse mit JsonProperty Attributen Dekoriert und das funktioniert soweit alles wunderbar.
Wenn ich jedoch einen String in Exponential Darstellung erhalte, also beispielsweise 1.0E-8, dann erhalte ich natürlich eine Exception.
Die Frage ist nun wie teile ich Json.Net mit das ich gerne NumberStyle.Any beim parsen des Strings verwenden möchte?
Hier etwas code mit einer etwas unschönen, aber dafür funktionierenden Lösung.
public decimal Volume
{
get { return _volume; }
set { _volume = value; }
}
[JsonProperty("volume", Required = Required.Always)]
public String VolumeString
{
get { return Volume.ToString(CultureInfo.InvariantCulture); }
set { Volume = Decimal.Parse(value, NumberStyles.Any, CultureInfo.InvariantCulture); }
}
Da ich das ganze wohl öfter implementieren muss, wäre es mir lieber einen weg über Json.NET verwenden zu können.
Grüße
André
Hallo Zusammen,
weiß einer von euch ob man bei der jährlichen Erneuerung des Action Packs auch jährlich eine Applikation entwickeln- und testen lassen muss oder kann man jährlich die gleiche Anwendung verwenden und erneut Kunden zuordnen?
Wir haben bereits einige getestete Anwendungen und die Gebühr müssen wir ja sowieso zahlen.
Die Frage ist nur, ob wir jedes mal eine neue Anwendung entwickeln müssen und jedes mal diesen Test durchführen müssen, wie z.B: Windows 7/8 Plattform Ready.
André
Hallo UZI,
<32Bit>
2.0.50727.5472
->C:\Windows\Microsoft.NET\Framework\v2.0.50727
4.0.30319.18052
->C:\Windows\Microsoft.NET\Framework\v4.0.30319
<64Bit>
2.0.50727.5472
->C:\Windows\Microsoft.NET\Framework64\v2.0.50727
4.0.30319.18052
->C:\Windows\Microsoft.NET\Framework64\v4.0.30319
< Installed .NET Frameworks >
.NET FW 2.0 SP 2
.NET FW 3.0 SP 2
.NET FW 3.5 SP 1
.NET FW 4.5 Client
.NET FW 4.5 Full
Kompiliert mit Zielframework .Net Framework 4.0
Edit: Gleiches Ergebnis bei .Net Framework 4.5
André
Hallo UZI,
hast du ein Link zu einem größeren Clip?
Edit: Hat sich erledigt, mit einem 2GB Clip wird der Progress wie erwartet dargestellt.
Progress: 0
Progress: 0
Progress: 0
Progress: 0
Progress: 0
Progress: 0
Progress: 0
Progress: 0
Progress: 0
Progress: 0
Progress: 0
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.01
Progress: 0.02
Progress: 0.02
Progress: 0.02
Progress: 0.02
André
Hallo sunshineh,
du solltest dich nochmal mit den Grundlagen (von WPF) befassen.
Wie MrSparkle bereits gesagt hat kannst du IsEnabled verwenden.
Das kannst du einfach in der View auf eine Eigenschaft binden.
Damit solltest du genügend Stichworte haben um weiter zu kommen.
André
Hallo zusammen,
diesen Fehler hatte ich gerade, als ich eine Zuvor erstellte .chm offen hatte.
An der Stelle könnte man die chm unter einem anderem Namen abspeichern lassen und darauf hinweise das die datei von einem anderem Prozess verwendet wird.
André
Hallo pinki,
das durchsteppen beeinflusst das zeitliche Verhalten.
Eventuelle Threads die von .Net selbst gestartet werden, laufen möglicherweise in der Zeit weiter.
Zeigst du uns einen Code ausschnitt können wir dir vielleicht genauer helfen.
André
Hallo adeptus,
gemeint ist Graphics.Clear auf das Bitmap:
MSDN Graphics.Clear-Methode
Der Alphakanal gibt die Transparenz der Farbe an.
0-255 wo 0 Transparent ist und 255 eben Undurchsichtig.
MSDN Color.FromArgb
Bitte beachte auch [Hinweis] Wie poste ich richtig? 1.1
André
Hallo TMann13,
das Stichwort ist Interpolation.
Eventuell sind auch folgende Begriffe hilfreich: Peak detection, Burst detection, Spike detection.
André