?
Hallo,
Ich habe ein Array aus unsigned char erstellt, welches ich als Bild benutze
unsigned char* m_Array
m_Array = new unsigned char[m_iWidth * m_iHeight * 3];
Nachdem das Bild gefüllt und bearbeitet wurde, kann es durch folgenden Quellcode in einer Picturebox angezeigt werden. Der Picturebox ist eine Controlvariable (m_statPic) vom Typ CStatic zugefügt.
bool CTestDlg::ShowPic(CStatic* Picturebox)
{
//Bitmapheader mit Informationen zum Bild für HBITMAP
BITMAPINFO bmi;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = m_iWidth;
bmi.bmiHeader.biHeight = m_iHeight;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 0;
bmi.bmiHeader.biXPelsPerMeter = 1000;
bmi.bmiHeader.biYPelsPerMeter = 1000;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;
CClientDC dc(this); //verknüpft dc mit dem Fenster
HBITMAP hBitmap; //Bitmap-Handle erstellen
//erstellt und dimensioniert hBitmap
hBitmap = CreateCompatibleBitmap(dc,m_iWidth,m_iHeight);
//wandelt Array* in hBitmap um
SetDIBits(dc, hBitmap, 0, m_iHeight, m_Array, &bmi, DIB_PAL_COLORS);
Picturebox->SetBitmap(getHBitmap());
DeleteObject(hBitmap); //Speicher wieder freigeben
ReleaseDC(&dc); //Speicher wieder freigeben
return false;
}
Jetzt habe ich eine neue Klasse erzeugt, in der ich ein Array als Bild verwalten möchte. Das heißt, die Deklaration des Array, das Bearbeiten des Array und die Routine zum anzeigen des Array werden ebenfalls als Methoden dieser neuen Klasse ArrayPic ausgelagert.
In der ShowPic() muss dann allerdings die Verknüpfung des dc anders realisiert werden, da der this-Pointer auf das falsche Objekt zeigen würde. Mein Versuch zur Korrektur war
bool CTestDlg::ShowPic([b]CWnd* pWnd,[/b] CStatic* Picturebox)
{
...
HDC hdc = GetDC(*pWnd);
...
ReleaseDC(*pWnd, hdc);
}
Der Aufruf der Methode erfolgt über
ArrayPic Obj;
Obj.setNew(...);
Obj.DrawRect(...);
//Bis hier hin ist noch alles OK.
//Das Auslesen einzelner Bildpunkte etc. klappt.
//Das Array ist also da und gefüllt
Obj.ShowPic(&m_hWnd, &m_statPic);
Leider ohne erfolg. Nachdem die Routine ausgelagert und abgeändert wurde, ist auf dem Bildschirm kein Bild zu sehen.
Bitte um Hilfe... trotz der Menge Text.
Gruß,
Alex