TImage zoomen und PenPos anpassen



  • <edit>Glaub nicht, daß ich mich vor Köstlichkeiten drücken will, @Eßer. Bin nicht der Typ, der Langeweile zur Passion machen würde. :p Also niemals Anns vor den Aufgabenstellungen. - Genau die Umrechnung ist das Prob. Nichts scheint wirksam zu sein. Vergrößer ich, erfolgt die Zeichenoperation schräg rechts unterhalb vom Corsor. Verkleiner ich, wird schräg links oberhalb vom Corsor gezeichnet. Bei GetCursorPos() streikt die Suche. Aber mit Canvas->PenPos sollte es ja klappen können.

    @WebFritzi, die Kombi mit int und float ist wieder mal ein Leckerbissen. Doch leider. Der Code greift weder in der Function noch im OnMouseDown des TImage. Daß rein gar nichts wirksam zu sein scheinen will, irritiert mich. Zur Demo hab ich aus der 1.2 mal eine 200 gemacht. Das gleiche Ergebnis.

    // im Constructor
    Graphics::TBitmap *VergrPict = new Graphics::TBitmap();
    void __fastcall TPixi::ZoomOutBtnClick(TObject *Sender)
    {
        VergrPict->Width = Image->Width;
        VergrPict->Width = Image->Width;
        VergrPict->Height = Image->Height;
        VergrPict->Assign(Image->Picture);
        Image->Width = Image->Width*1.2;
        Image->Height = Image->Height*1.2;
        Image->Canvas->StretchDraw(Image->Canvas->ClipRect,VergrPict);
        FormResize(Sender); // zentriert das Bild im Fenster
        int x = (int)((float)Image->Canvas->PenPos.x * (float)200);
        int y = (int)((float)Image->Canvas->PenPos.y * (float)200);
        Image->Canvas->PenPos = Point(x,y);
    }
    //---------------------------------------------------------------------------
    void __fastcall TPixi::ZoomInBtnClick(TObject *Sender)
    { 
        VergrPict->Width = Image->Width;
        VergrPict->Height = Image->Height;
        VergrPict->Assign(Image->Picture);
        if (Image->Width >= 30 && Image->Height >= 30)
        {
            Image->Width = Image->Width*0.8; 
        }
        if (Image->Width >= 30 && Image->Height >= 30)
        {
            Image->Height = Image->Height*0.8;
        }
        Image->Canvas->StretchDraw(Image->Canvas->ClipRect,VergrPict);
        FormResize(Sender); // zentriert das Bild im Fenster  
        int x = (int)((float)Image->Canvas->PenPos.x * (float)0.8);
        int y = (int)((float)Image->Canvas->PenPos.y * (float)0.8);
        Image->Canvas->PenPos = Point(x,y);   
    }
    

    Von außerhalb wohl nicht nachvollziehbar, aber vielleicht kann die Erfahrung etwas vermuten? Hebel ich die Wirksamkeit ggf. durch eine Standardmaßnahme aus? Canvas->PenPos hab ich in der ganzen App aber nur an dieser einen Stelle definiert.



  • Also, ich verstehe nicht, was du überhaupt willst. Was faselst du die ganze Zeit vom Cursor? Meinst du den Mauscursor? Was hat der damit zu tun?



  • Ja, ich mein den Mauscursor. Der ist doch mein Malwerkzeug. OnMouseDown im TImage, von dort aus soll die Zeichenoperation starten. Doch gezeichnet wird schräg unterhalb des Mauszeigers. Die aktuelle Zeichensituation und der Mauszeiger sollen doch übereinstimmen. Und das tun sie eben nicht. Auch mit dem eingefügten Code tun sie es nicht. Ich hatte schon ähnliche Versuche unternommen.



  • Achso, du meinst also,

    void __fastcall TForm1::OnImageMouseDown(..., int X, int Y, ...)
    {
       Image->Canvas->PenPos = Point(X, Y);
    }
    

    geht nicht?



  • Nein, geht nicht. Auch eine korrigierende Berechnung bleibt wirkungslos.

    Ist meine Methode zu Zoomen doch falsch? Es besteht ja eine Abweichung zwischen Image->Width und Image->Picture->Graphic->Width. Aber ich darf das IMHO nicht korrigieren, sonst veränder ich die reale Bildgröße (mehrfach probiert).



  • Hmmm..., ich wage inzwischen nicht mehr, dran zu glauben, daß das Prob mit BCB-Mitteln in den Griff bekommbar ist. Hab die Frage also auch im API-Board gestellt. Doppelpost ist damit natürlich nicht gemeint. Aber es gibt defakto eine Lösung, sogar M$Paint kennt sie. 😃 Ich hoffe, daß sie jemand kennt oder daß sich der Weg erarbeiten läßt.

    Dank euch auf jeden Fall schon mal für eure Mühe und die gute Hilfe. Wenn sich nichts bewegt, hexen kann ja niemand. Wenn doch noch jemand eine Idee hat, hemmungslos her damit. 🙂 Und keine Anns, das Wort "redundant" würde von mit persönlich mit allerschlimmster Folter geahndet. 😃



  • ... dann muß der Berg eben zum Propheten kommen... dachte ich (bin aber wohl kein Pferd).

    Origin = Point((X)/(float)0.8,(Y)/(float)0.8);
        MovePt = Point((X)/(float)0.8,(Y)/(float)0.8);
    

    steht nun ich der OnMouseDown des TImage, als hätte ich es nie geschrieben. Es ist wirkungslos.

    Das API-Board ist auch wirkungslos.

    Dto. ein weiteres Forum.

    Ich kann keine sinnvolle Grafikanwendung bauen. Offenbar kann niemand eine sinnvolle Grafikanwendung bauen.

    Niemand? Oh, hab ich google durchwühlt. Scheinbar... "niemand" stimmt.

    Oh wär ich doch Bienenzüchter geworden. Denn ein "geht nicht" ist ein "geht nicht", bleibt ein "geht nicht".

    Gilt das für alle? Oder gilt das nur für unlizenzierte, die aber mit ihrer IDE sehr wohl eine Lizenz erworben haben? Also castriert um das große Doppelabzockens durchpeitschen zu können?

    Oder kann mir jemand beweisen, daß das alles Blödsinn ist, was ich hier geschrieben hab?



  • Sacht mal Leute, das ist ja schon der pure Abkocheffekt. Ich seh immer wieder, wie Leute aus ihrer eigenen Grafikpraxis heraus gezielte Hilfe geben. Auch ich bekam solche Hilfe. Es wird betont, daß ich nicht in der Lage sei, ein Grafikprogramm zu bauen. LnL, ihr beschäftigt euch ernsthaft mit der IDE. Sowas tut ein erwachsener Mensch nicht, wenn es nur läppischer halber Spielkram ist - es sei den, er hätte sich in ein traumatisches Pseudoparanoia hineinmanövriert.

    Einige von euch wissen also genau, wie man richtig an die Sache dran geht. Aber sie machen es zum gehüteten Geheimnis. Warum? Wichtigtuerei? Vor wem? Vor Leuten, die die vermeindlich sinnlose Spielwiese verlassen und das definitive Wissen mitnehmen, daß alles nur Augenwischerei, Gaukelei und Selbstberug ohne jeden wirklichen Wert ist?

    Dank noch mal an alle, die mir interessiert in irgendeiner Form, auch indirekt geholfen haben. Ich hoffe, ich konnte wenigstens ein klein wenig Ausgleich einbringen. Ich wünsch der Runde noch weiterhin gutes gelingen. Haltet euch wacker.

    Gruß
    Omega-X



  • Wie wär's mit

    Origin = Point(X,Y);
    MovePt = Point(X,Y);
    

    ? 😕



  • Dank dir sehr, @WebFritzi. Genau das hab ich doch im Original.

    Ansich bin ich mit dem Proggy über den Berg. Alles benötigten Drawtools, Invertieren, heller, dunkler, Bildgröße ändern, "neu" mit den benötigten Formaten, 'ne sehr große gut geschlossene und homogene Farbauswahl mit je 500 gesättigt, halb gesättigt, Copy und verschiebbares Paste, das MarkRect wird automatisch und zuverlässig bei jeder weiteren Aktion gelöscht... kurz, ein richtiges Arbeitstool, daß im Handling sogar mir richtig Spaß macht. Und ich bin da anspruchsvoll. Kein Schnickschnack, dafür hat die Maschine die immer wiederkehrenden Routinehandgriffe zu übernehmen. Usw.

    OnIdle, Open- und save-Routine sind dann schnell integriert. Ich hab je die Module bereits in anderen Apps. Das kommt am Schluß vor der ersten Fertigstellung. Und dann kommen auch solche Spezialitäten wie der Code, den du mir gegeben hast. Auf dieser Basis aufbauend läßt sich einiges machen. Dazu weiteres, was es noch zu entdecken gibt. Umrißmarkierung wäre später die hohe Schule. Also ein projekt, das für viele Jahre für Spannung und Spaß sorgen kann und viel lernen läßt. genau so mag ich das, so ist es edel.

    Und jetzt soll alles am Zoomen hängen? Ich tu so, als würde mich das gleichgültig lassen. In Wahrheit... aber der starke Trost ist das ultimative RPG-Projekt. Ein langer Weg mit sicher oft gnadenlosen Durststrecken, doch das Ziel wird die Mühe immer lohnen. - Und genau auf dieses Projekt wollte ich das Tool maßschneidern, ohne die Universalität einzuengen.

    Aber Grafik ohne Zoomen? Das geht einfach nicht. Und wenn ich was erarbeiten will, dann wiedersetzt sich mir höchstens eine Diktatur - sofern sie wirklich stark ist.

    Und hier scheint sie ultrastark zu sein. Denk nur an die Minipixel. Nein, ich träume nicht. Dies und das Zoomen gehen unter WIN98 einfach nicht. Denk mal: Als Starter hatte ich das einwandfrei ohne jedwede Hilfe hinbekommen. Richtig spielerisch ist es gelungen. Dabei hatte ich wirklich noch nicht die geringste Übersicht. Unter WIN95 war wohl noch nicht der Daumen drauf. Bei den Pixeln schmunzelt ihr, weil ihr zu dieser Zeit sowas nie ausgelotet habt. Nun geht es nicht mehr, ihr kennt es nicht.

    Aber Zoom kennen alle. Und hier wundere ich mich. Ich laß sowas nicht auf sich beruhen. Es gelingt, oder ich brauch das gesamte Umfeld nicht. Definitiv. Der Hersteller verkauft mir brauchbare Ware oder er geht pleite. Einmal kann er mich reinlegen, ein zweites mal gelingt es ihm nicht. Doch Borland wäre nur der Büßer. Da sind höhere Mächte am Ruder, die von den Millionen kritiklos und einseitig favorisiert und gekrönt wurden. Was geschieht, schmeckt ihnen nicht, doch sie fressen weiter, verkaufen sich weiter...

    Ole, hier ist nicht der Platz für Politik. Hier ist der Platz zum Arbeiten. Aber geht denn was? Ich wag nicht mehr dran zu glauben...



  • Man muß allerdings sagen, die einheimische Mentalität beinhaltet auch einen großen Bumerangeffekt. In den Borlangforen zB. gilt der Grundsatz, an einem Thema wird so lange gearbeitet, bis eine Lösung gefunden ist. Hatte bevor ich c-plusplus.net entdeckte bereits 3 Foren aufgegebnen. Eins hätte mir gut gefallen, auch wenn es sehr klein ist. Doch fast jeder Thread endete mit einer Frage. Hier allerdings bestehen solide Möglichkeiten.

    Wie gut oder schlecht werden sie genutzt? Dieses Beispiel zeigt zumindest eine seite der Wahrheit. Noch dazu in ausgeprägtester Form. Ich bin doch nicht der erste Mann auf dem Mond. Auch andere haben sich mit sicherheit an dem Thema schon versucht. Sie hatten für sich allein ebenfalls keinen Erfolg.

    Na und? Ist das ein Grund, nicht darüber zu sprechen? Allein das Wissen darum könnte die Energie zusammenbringen, am Thema weiter zu arbeiten. Natürlich hätte zB. ich jederzeit eine Übergangslösung parat. Aber wohl gemerxt Übergangslösung, ausschließlich dafür gedacht, die wirkliche Lösung zu finden. Auf Dauer will ich mich nicht für mein eigenes Mikriprogramm schämen müssen. Das geb ich mir nicht.


Anmelden zum Antworten