none
Pixel aus einem Bitmap auswerten RRS feed

  • Frage

  • Hallo*

    ich habe ein Bitmap im Format 16bppGrayScale und möchte den Grauwert einzelner Pixel ermitteln. Die Funktion Bitmap.GetPixel (x,y) bringt den Fehler "ungültiger Parameter" zurück, obwohl ich mich mit x und y innerhalb des Bildes befinde.

    Weiß jemand Rat?
    C#, VS2010

    Danke.

    Donnerstag, 21. Juli 2011 11:26

Antworten

Alle Antworten

  • Hi,

    Bitmap.GetPixel nimmt zwei Integerwerte. Übergibst Du evtl. Int64? Falls ja: Bist Du sicher, dass x und y nicht vertauscht wurden? Also dass du evtl. ein bei einem Bild von 400 Breite und 200 Höhe das Pixel per GetPixel( 150, 250 ) abfrägst? Dabei wäre dann 250 zu groß, da die Bitmap nur 200px hoch ist.

    Zum anderen muss x und y kleiner als Höhe bzw. Breite sein. Bei obigem Beispiel würde GetPixel( 400, 200 ) ebenfalls fehlschlagen, da der Index 0-basiert und und Du daher als Maximalwerte 399, 199 angeben kannst.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 21. Juli 2011 12:40
    Moderator
  • Hallo Stefan,

    vielen Dank für Deine Antwort.

    Ich übergebe Konstanten z.B. GetPixel(10,10). Das Bild ist über 1000 Pixel hoch und breit. Ich vermute das Problem eher in der Tatsache, dass es sich um ein 16bit/Pixel Grauwert handelt. In der Color-Struktur sind aber nur byte-Werte für R, G und B definiert, die dann überlaufen würden, wenn der 16 bit Grauwert in einen oder alle drei RGB Werte geschrieben werden sollte. Mir ist völlig unklar, wie das funktionieren soll. es sei denn, man teilt den 16 bit Grauwert in zwei 8 bit Werte auf z.B. High Byte in R und Low Byte in G. Aber wie gesagt, die Funktion GetPixel bringt ja nur einen Fehler - ich kann es nicht nachprüfen.

    Gruß Jens

     

    Sonntag, 24. Juli 2011 09:04
  • Hallo Jens,

    kannst Du deine Grafik mal irgendwo zum Download bereitstellen?

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Sonntag, 24. Juli 2011 09:51
    Moderator
  • Hallo Jens,

    System.Drawing (GDI+) kann damit nicht umgehen.
    Du solltest auf WPF Imaging zurückgreifen, dort gibt es auch Gray16.
    Charlzes Petzold beschreibt einiges dazu in Bitmaps And Pixel Bits
    und auch wie man den Zugriff bei den Größen fixer gestalten kann.

    Gruß Elmar

    Sonntag, 24. Juli 2011 12:08
    Beantworter