TBitmap::HandleType
-
Leider, das Bitmap->Handle wollte auch nicht gehen. Hab auch noch mal die Reihenfolge der parameter und die Zuordnungen vertauscht. Alles negatig. - An den Helpseiten merxt man deutlichm, daß Freitag, später, später Nachmittag war.
Ich bin zu doof, oder eine klare Zuordnung ist nicht möglich. Wenn wenigstens das Expirimenterln was bringen würde...
-
Hallo,
Wie fügst du denn dein Bitmap in die Zwischenablage ein? Vielleicht funktioniert das ja nicht. Zeig mal ein bischen Code
Sorry Ich hab oben grad gesehen wie du das machst.
Versuch mal folgendesunsigned int DataHandle; HPALETTE APalette; unsigned short MyFormat; try { MarkBase->Picture->Bitmap->SaveToClipboardFormat(MyFormat,DataHandle,APalette); Clipboard()->SetAsHandle(MyFormat,DataHandle); } catch(...) { // irgendwas }[ Dieser Beitrag wurde am 18.03.2003 um 16:25 Uhr von Braunstein editiert. ]
[ Dieser Beitrag wurde am 18.03.2003 um 16:26 Uhr von Braunstein editiert. ]
-
Jau, das eigene ClipboardFormat klappt. Jetzt hab ich aber Nachteile beim Pasten. Ich muß dieses Format einfügen können. Hab es mit dem Beispiel aus der Hilfe versucht, klappt nicht.
Außerdem, was bringt es, in einem eigenen Format zu Pasten? Andere Anwendungen können damit nichts anfangen.
Aber es hätte ja erst mal eine Möglichkeit sein können, mit der erstellten HandleType doch arbeiten zu können. Das klappt leider nicht. An meiner Syntax ist was faul.
Ich mach das jetzt so, bis es klappt: Ich verwende den alten Code und setz das DDB-Flag für MarkBase nicht. Es ist schon ein großer Vorteil, anwendungsintern mit einem schnellen DDB-Handle arbeiten zu können.
Schlecht sieht's nur aus, wenn ich ICO oder (eher nicht wichtig) WMF laden will. Das klappt bei DDB nicht bzw. wird beim Handling mit dem TImage wieder gelöscht.
Also entweder, ich bekomm den Wechsel hin, oder ich muß für ICO und WMF ein zweites TImage mit DIB-Flag bereit haben. Wär eigentlich auch kein Problem. Lieber wär mir natürlich die Möglichkeit, wechseln zu können.
-
Hat keinen Wert, ich kann nicht auf die Rückwandlung des BitMapHandle verzichten. Verschiedene Functionen wie Bild heller, dunkler, Graustufen... werden zwar noch fehlerfrei durchlaufen, aber nicht mehr ausgeführt. Das Arbeiten mit Speicherbitmaps hilft nicht, sie übernehmen offenbar das Handle.
Das wär die Umwandlungsfunction:
void __fastcall TPixi::BitmapHandleType(TObject *Sender) { if (Image->Picture != 0) Image->Picture->Bitmap->HandleType = bmDDB; }Die Rückverwandlung hab ich weiter probiert, aber keine Chance. Hat inzwischen jemand Erfahrung sammeln können und kann mir ggf. weiterhelfen? Bzw. wie ist die Syntax in der Hilfe richtig umzusetzen? Ich komm hier nicht weiter.
-
Haaaalt, hiergeblieben. Zumindest bis Montag solltest du noch sichtbar sein.

-
Hallo,
Was genau funktioniert denn nicht. Zur Umwandlung von dib nach ddb sieh mal in die Hilfe zu:
*
CreateDIBitmap
The CreateDIBitmap function creates a device-dependent bitmap (DDB) from a device-independent bitmap (DIB) and, optionally, sets the bitmap bits.HBITMAP CreateDIBitmap(
HDC hdc, // handle to device context
CONST BITMAPINFOHEADER *lpbmih, // pointer to bitmap size and
// format data
DWORD fdwInit, // initialization flag
CONST VOID *lpbInit, // pointer to initialization data
CONST BITMAPINFO *lpbmi, // pointer to bitmap color-format data
UINT fuUsage // color-data usage
);
*Ciao
[ Dieser Beitrag wurde am 19.05.2003 um 14:54 Uhr von Braunstein editiert. ]
-
Die Umwandlung ist kein Problem. Den Code hatte ich im Beitrag darüber noch mal gepostet. Aber ich bekomm die Rückverwandlung nicht hin. Wir hatten ja zu mehreren ergebnislos geknobelt. Bin inzwischen auch nicht weitergekommen.
-
und was passiert, wenn du ein neues dib Bitmap erzeugst und dann dein altes reinkopierst. Das müsste doch gehen, oder ?
-
Dann ist die Zwischenablage damit zufrieden. Andere Anwendungen können auch auf das Format zurückgreifen.
Functionen wie Bild heller, dunkler, Graustufen werden aber nicht mehr bildwirksam ausgeführt. Also scheinen doch Informationen übergeben zu werden.
Wie es bis jetzt aussieht, komm ich um die Rückverwandlung in DIB nicht drumrum.
-
*lila*, mein letzter Versuch, dann muß der Thread wieder Schlafen gehen, bis zufällig irgendjemand irgendwann wieder die Lampe reibt.

Bei so vielen erfahrenen Programmierern in der Runde + die total optimierte und bombastisch starke Hilfe im BCB6 :p sollte rein theoretisch doch jemand in der lage sein,
DDB wieder in DIB
zurückzuverwandeln?
Das dürften nur ganz wenige Codezeilen sein. Aber wie es nun mal des Lernteufels brauch ist, genau diese Syntax bekomm ich nicht zusammen. Wer kann, wer mag Idee oder Hilfe stiften? Laßt die Mühen des gepeinigten Fragers und vor allem die Mühen der unermüdlichen Helpers nicht umsonst gewesen sein.

-
Hallo mal wieder,
Du müsstest dich mal in der MSDN umschauen. Da findest du bestimmt etwas. Vielleicht hilft dir CreateDIBSection weiter. Ich habs jetzt allerdings nicht ausprobiert.
Ciao
-
Ich hab jetzt hier nicht alles gelesen/verfolgt, aber warum legst Du nicht 2 Kopien Deines Bitmaps an, eines DDB und eines DIB. Dann brauchste nix zurückverwandeln, höchsten zurück kopieren

-
CreateDIBSection hat mich nicht weitergebracht, @Braunstein. Leider, nur die DIB-Seite, keine Umwandlung.
@Peter, das dürfte nicht möglich sein oder gar nichts bringen. Ich verwende das DDB wegen des flotten Handlings mit dem TImage. Anzeige hoher Vergrößerungen, flottes Malen, flottes Scrollen. Wenn ich zB. die DIB-Referenz unter dem TImage mit dem DDB-Handle mitlaufen laß, muß ich beide synchron schalten. Also wartet mein schnelles Arbeits-Image ständig auf das viel langsamere DIB-Image. Alle Berechnungen und Bewgungen müssen darin ja aktuell durchgeführt werden.
Total scheitern tut das ganze dann am Zoomfaktor. Die Arbeitsvergrößerung von 1000% kann bei DIB allenfalls für sehr kleine Bilder erreicht werden. Größere Bilder werden schon ab 300 oder 400% nicht mehr angezeigt. Bei DDB kann ich problemlos 10 MB "schwere" Bilder auf 1000% bringen und flott darin arbeiten.
Leider, so gut es gemeint ist, keine Chance. Ich brauch wirklich die Umwandlung, oder ich muß mit faulen Tricks (sinnlose Functionsaufrufe) arbeiten, um einige Functionen der App überhaupt nutzen zu können.
Freaks der bildenden Künste, nur testhalber mal ein
Image->Picture->Bitmap->HandleType = bmDDB;,
und ihr erlebt ein völlig neues Arbeitsgefühl. Wer DDB kennt, will es sicher nicht mehr missen. Die Knobelkur, es wieder zurückwandeln zu können, sollte sich jederzeit lohnen können. Wer macht mit?
-
Hallo Zusammen,
Ich will auf einem Image die Ihre Picture aus dem Clipboard() (als Metafile) bekommt zeichnen, dies geht leider nicht weil BCB will ein Bitmap-Format haben, ist es möglich diesen Metafile-Format (direkt aus dem Clipboard() oder in den Image) in einem Bitmap zu wandeln? ich habe vergeblich den ganzen Tag heute versucht, aber ohne Erfolg.
Gruß
C++:Hoby
-
Hallo,
Du kannst natürlich auch ein Metafile in ein Bitmap wandeln aber es wäre doch sicher einfacher mit TCanvas::Draw() das Metafile direkt zu zeichnen.
Ciao
-
hallo,
genau das habe ich gemacht, durch Zufall, hab einen Beispiel gefunden, ich wusste es nicht, ich habe gedacht man muss immer Bitmap haben.
Aber es würde mich intressieren wie man Metafile zu Bitmap umwandeln kann?
ich habe nur einen Beispiel wie man png zu Bitmap umwandelt und umgekehrt.
danke
C++_Hoby