Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Bitmaps drucken durch WinApi?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 994
Wohnort: Niederbayern

BeitragVerfasst am: 18.11.2020, 21:34    Titel: Bitmaps drucken durch WinApi? Antworten mit Zitat

Wie kann ich neben Texten auch Bitmap-Dateien drucken? Gibt es da eine Möglichkeit, einen speziellen Befehl dafür? Ich habe zum Beispiel auf dem Computer eine Bilddatei die ich auf dem Bildschirm an einer bestimmten Position mit ausdrucken will. Habe schon mal im Internet ein wenig gesucht, aber nichts gefunden...

Edit:
Jetzt habe ich doch etwas gefunden, das allerdings in C++ programmiert ist. Muss mich da mal ein wenig einarbeiten. Vielleicht kriege ich das hin?
_________________
SHELL SHUTDOWN -s -t 05


Zuletzt bearbeitet von ALWIM am 19.11.2020, 23:33, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5936
Wohnort: Deutschland

BeitragVerfasst am: 19.11.2020, 10:41    Titel: Antworten mit Zitat

Hi ALWIM,

naja, WinAPI ist WinAPI, egal, ob du's von einem C-, FreeBASIC- oder VB6-Programm aus aufrufst. Die gleichen Funktionen kannst du auch in FreeBASIC nutzen, nur die Syntax der Aufrufe ist etwas anders. lächeln

Viele Grüße!
Sebastian
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 994
Wohnort: Niederbayern

BeitragVerfasst am: 19.11.2020, 23:46    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Hi ALWIM,

naja, WinAPI ist WinAPI, egal, ob du's von einem C-, FreeBASIC- oder VB6-Programm aus aufrufst. Die gleichen Funktionen kannst du auch in FreeBASIC nutzen, nur die Syntax der Aufrufe ist etwas anders. lächeln

Viele Grüße!
Sebastian
Doch nicht so einfach wie ich dachte! Vor allem, wenn man von C++ keine Ahnung hat. Ich stehe etwas auf dem Schlauch, muss ich zugeben. Das was ich gefunden habe, ist wahrscheinlich doch nicht so ganz das richtige. Nichts mit WinApi?

Code:
 BitBlt(
        hdcMem, // handle to destination DC
        0,        // x-coord of destination upper-left corner
        0,        // y-coord of destination upper-left corner
        188,    // width of destination rectangle
        145,    // height of destination rectangle
        hdcMem, // handle to source DC
        0,        // x-coordinate of source upper-left corner
        0,        // y-coordinate of source upper-left corner
        SRCCOPY // raster operation code
    );


Eventuell kann ich die Grafik per Hand zeichnen? Das wäre zumindest mein Lösungsansatz im Moment. Ich lade eine Datei mit Zahlen. Jede Zahl steht für eine Farbe und dann gehe ich jede Zahl einzeln durch. Schritt für Schritt.

In etwa so:
Code:

88888888777777771111111133333333
88888888777777771111111133333333
88888888777777771111111133333333
88888888777777771111111133333333
88888888777777771111111133333333
88888888777777771111111133333333
88888888777777771111111133333333
88888888777777771111111133333333

_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1029
Wohnort: Ruhrpott

BeitragVerfasst am: 20.11.2020, 00:03    Titel: Antworten mit Zitat

Die WinAPI - Funktion BitBlt ist da ein ganz heisser Kandidat.

Gruß
grindstone

EDIT:
Ich sehe, du hast sie schon entdeckt, und eigentlich müsste sie funktionieren. Eventuell muß vorher noch irgendein Objekt initialisiert werden.
Code:
case WM_CREATE:
        hBitmap = (HBITMAP)LoadImage(hInst, L"c:\\test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
        break;
    case WM_PAINT:
        PAINTSTRUCT     ps;
        HDC             hdc;
        BITMAP          bitmap;
        HDC             hdcMem;
        HGDIOBJ         oldBitmap;

        hdc = BeginPaint(hWnd, &ps);

        hdcMem = CreateCompatibleDC(hdc);
        oldBitmap = SelectObject(hdcMem, hBitmap);

        GetObject(hBitmap, sizeof(bitmap), &bitmap);
        BitBlt(hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY);

        SelectObject(hdcMem, oldBitmap);
        DeleteDC(hdcMem);

        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        DeleteObject(hBitmap);
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;

_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 994
Wohnort: Niederbayern

BeitragVerfasst am: 21.11.2020, 04:28    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Die WinAPI - Funktion BitBlt ist da ein ganz heisser Kandidat.

Gruß
grindstone

EDIT:
Ich sehe, du hast sie schon entdeckt, und eigentlich müsste sie funktionieren. Eventuell muß vorher noch irgendein Objekt initialisiert werden.
Code:
case WM_CREATE:
        hBitmap = (HBITMAP)LoadImage(hInst, L"c:\\test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
        break;
    case WM_PAINT:
        PAINTSTRUCT     ps;
        HDC             hdc;
        BITMAP          bitmap;
        HDC             hdcMem;
        HGDIOBJ         oldBitmap;

        hdc = BeginPaint(hWnd, &ps);

        hdcMem = CreateCompatibleDC(hdc);
        oldBitmap = SelectObject(hdcMem, hBitmap);

        GetObject(hBitmap, sizeof(bitmap), &bitmap);
        BitBlt(hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY);

        SelectObject(hdcMem, oldBitmap);
        DeleteDC(hdcMem);

        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        DeleteObject(hBitmap);
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;


Wie wäre es damit:

Code:
DO
         IF FILEEXISTS("Logo.txt") THEN
            OPEN "Logo.txt" FOR INPUT AS #f ' laden
            DO UNTIL EOF(f)
               LINE INPUT #f, text ' Zeile einlesen
               IF LogoLogo(e) = 0 THEN LogoLogo(e) = 1: t = e: e = 1: EXIT DO
               e += 1
            LOOP
            CLOSE #f
         END IF
         FOR k = 1 TO 32
            IF MID(text, k, 1) = "8" THEN SetDCPenColor(Printer.hdc, &h808080)
            IF MID(text, k, 1) = "7" THEN SetDCPenColor(Printer.hdc, &hb3b3b3)
            IF MID(text, k, 1) = "2" THEN SetDCPenColor(Printer.hdc, &h008000)
            IF k = 1 THEN MoveToEx(Printer.hdc, 300, (50+(t*5)), Null)
            LineTo(Printer.hdc, (300+(k*5)), (50+(t*5)))
         NEXT
         IF t > 31 THEN EXIT DO
      LOOP

Vielleicht nicht so ganz die Ideale Lösung, aber sie funktioniert! Besser als gar nichts...
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1029
Wohnort: Ruhrpott

BeitragVerfasst am: 22.11.2020, 00:41    Titel: Antworten mit Zitat

Erinnert mich irgendwie an die gute alte Zeit, als es noch keine grafikfähigen Drucker gab (zumindest keine bezahlbaren) und Bilder mit Buchstaben und Zahlen erzeugt wurden. grinsen

Kurze Frage: Wenn du zuerst eine Linie zum Drucker schickst und danach einen Text, der über dieser Linie steht, wird das korrekt ausgedruckt, oder steht der Text dann unter der Linie? Soll heissen: Kannst du dich beim Positionieren der Elemente auch nach oben bewegen und sorgt der Druckertreiber für eine korrekte Anordnung der Elemente?

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 994
Wohnort: Niederbayern

BeitragVerfasst am: 22.11.2020, 01:06    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Erinnert mich irgendwie an die gute alte Zeit, als es noch keine grafikfähigen Drucker gab (zumindest keine bezahlbaren) und Bilder mit Buchstaben und Zahlen erzeugt wurden. grinsen

Kurze Frage: Wenn du zuerst eine Linie zum Drucker schickst und danach einen Text, der über dieser Linie steht, wird das korrekt ausgedruckt, oder steht der Text dann unter der Linie? Soll heissen: Kannst du dich beim Positionieren der Elemente auch nach oben bewegen und sorgt der Druckertreiber für eine korrekte Anordnung der Elemente?

Gruß
grindstone
Es wird alles korrekt ausgedruckt! Vielleicht habe ich von vorn herein die richtige Anordnung? Bei einem Testdruck, wurde alles so ausgedruckt, wie es sein soll.

Zitat:
Wenn du zuerst eine Linie zum Drucker schickst und danach einen Text, der über dieser Linie steht, wird das korrekt ausgedruckt, oder steht der Text dann unter der Linie?
Keine Ahnung? Müsste ich vielleicht mal testen.
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz