Bilddaten (Pixelverarbeitung)



  • Hallo zusammen!

    Ich schreibe zur Zeit ein Programm um Bilder in Ascii-Art umzuwandeln. Das funktioniert auch soweit ganz gut, nur das ich bei meinem Code das Problem habe, das ungefähr ein viertel des Bildes von Rechts fehlt. Woran könnte das liegen? Ist mein Denkansatz falsch? Oder hab ich was beim Auswerten der Pixel vergessen?

    Hier die Funktion die die Konvertierung durchführt:

    array<System::String^>^ TextProcessor::ValuesToText ()
    {
    	Rectangle rect = Rectangle (0, 0, _Bitmap->Width, _Bitmap->Height);
    	System::Drawing::Imaging::BitmapData^ bmpData = _Bitmap->LockBits (rect, System::Drawing::Imaging::ImageLockMode::ReadOnly, _Bitmap->PixelFormat);
    
    	ptr = reinterpret_cast<int*> (bmpData->Scan0.ToPointer ());
    
    	_Lines = gcnew array<String^>(_Bitmap->Height);
    	String^ Line = gcnew String(L"");
    
    	for (int y = 0; y < _Bitmap->Height; y++)
    	{
    		PixelData* pPixel = PixelAt(0, y);
    		for (int x = 0; x < _Bitmap->Width; x++)
    		{
    			int value = (pPixel->red + pPixel->green + pPixel->blue) / 3;
    			Line += _Ramp->Substring (value, 1);
    			pPixel++;
    		}
    		_Lines[y] = Line;
    		Line = L"";
    	}
    	_Bitmap->UnlockBits (bmpData);
    
    	return _Lines;
    }
    
    PixelData* TextProcessor::PixelAt(int x, int y)
    {
    	return reinterpret_cast<PixelData*> (ptr + y * _Bitmap->Width + x * sizeof (PixelData));
    }
    

    PixelData ist wie folgt deklariert:

    public struct PixelData
    {
        Byte blue;
        Byte green;
        Byte red;
    };
    

    P.S. Wenn ihr einen Weg kennt, das ganze noch performanter zur gestalten, ich bin für alles offen. 🙂



  • Habs rausbekommen:

    PixelData war noch nicht vollständig:

    public struct PixelData
    {
        Byte alpha; // <-- Hat gefehlt.
        Byte red;
        Byte green;
        Byte blue;
    };
    

    Jetzt gehts. 🙂


Anmelden zum Antworten