AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi transparentes Bild über Bild ausgeben
Thema durchsuchen
Ansicht
Themen-Optionen

transparentes Bild über Bild ausgeben

Ein Thema von HAF4ever · begonnen am 11. Nov 2003 · letzter Beitrag vom 12. Nov 2003
Antwort Antwort
Benutzerbild von HAF4ever
HAF4ever

Registriert seit: 31. Okt 2003
Ort: Enns - Österreich
37 Beiträge
 
#1

transparentes Bild über Bild ausgeben

  Alt 11. Nov 2003, 17:49
Hallo zusammen ...

Ich habe 2 Jpeg Bilder.
Die Lasse ich anzeigen in Image1 und Image2.
Bis hierhin geht es noch.

Nur will ich nun das Bild in Image2 recht unten im Image1 einfügen und zwar transparent ...
aber ich hab keine Ahnung wie ich das machen kann.

Das ist sicher kein Problem für jemanden, der sich schon mit Grafikprogrammierung beschäftigt hat.


Danke schon im vorraus.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: transparentes Bild über Bild ausgeben

  Alt 11. Nov 2003, 18:31
hi!

Habe erst letzthin folgende Funktion gebraucht.
Vielleicht kannst du noch Trys und Excepts an der richtigen Stelle einsetzen.


Delphi-Quellcode:
procedure DrawTransparentBitmap(DC : HDC; hBmp : HBITMAP;
  xStart : integer; yStart : integer; cTransparentColor : COLORREF);
var
  bm : BITMAP;
  cColor : COLORREF;
  bmAndBack, bmAndObject, bmAndMem, bmSave : HBITMAP;
  bmBackOld, bmObjectOld, bmMemOld, bmSaveOld : HBITMAP;
  hdcMem, hdcBack, hdcObject, hdcTemp, hdcSave : HDC;
  ptSize : TPOINT;
begin
  hdcTemp := CreateCompatibleDC(dc);
  SelectObject(hdcTemp, hBmp); // Select the bitmap

  GetObject(hBmp, sizeof(BITMAP), @bm);
  ptSize.x := bm.bmWidth; // Get width of bitmap
  ptSize.y := bm.bmHeight; // Get height of bitmap
  DPtoLP(hdcTemp, ptSize, 1); // Convert from device
  // to logical points

  // Create some DCs to hold temporary data.
  hdcBack := CreateCompatibleDC(dc);
  hdcObject := CreateCompatibleDC(dc);
  hdcMem := CreateCompatibleDC(dc);
  hdcSave := CreateCompatibleDC(dc);

  // Create a bitmap for each DC. DCs are required for a number of
  // GDI functions.

  // Monochrome DC
  bmAndBack := CreateBitmap(ptSize.x, ptSize.y, 1, 1, nil);

  // Monochrome DC
  bmAndObject := CreateBitmap(ptSize.x, ptSize.y, 1, 1, nil);

  bmAndMem := CreateCompatibleBitmap(dc, ptSize.x, ptSize.y);
  bmSave := CreateCompatibleBitmap(dc, ptSize.x, ptSize.y);

  // Each DC must select a bitmap object to store pixel data.
  bmBackOld := SelectObject(hdcBack, bmAndBack);
  bmObjectOld := SelectObject(hdcObject, bmAndObject);
  bmMemOld := SelectObject(hdcMem, bmAndMem);
  bmSaveOld := SelectObject(hdcSave, bmSave);

  // Set proper mapping mode.
  SetMapMode(hdcTemp, GetMapMode(dc));

  // Save the bitmap sent here, because it will be overwritten.
  BitBlt(hdcSave, 0, 0, ptSize.x, ptSize.y, hdcTemp, 0, 0, SRCCOPY);

  // Set the background color of the source DC to the color.
  // contained in the parts of the bitmap that should be transparent
  cColor := SetBkColor(hdcTemp, cTransparentColor);

  // Create the object mask for the bitmap by performing a BitBlt
  // from the source bitmap to a monochrome bitmap.
  BitBlt(hdcObject, 0, 0, ptSize.x, ptSize.y, hdcTemp, 0, 0,
    SRCCOPY);

  // Set the background color of the source DC back to the original
  // color.
  SetBkColor(hdcTemp, cColor);

  // Create the inverse of the object mask.
  BitBlt(hdcBack, 0, 0, ptSize.x, ptSize.y, hdcObject, 0, 0,
    NOTSRCCOPY);

  // Copy the background of the main DC to the destination.
  BitBlt(hdcMem, 0, 0, ptSize.x, ptSize.y, dc, xStart, yStart,
    SRCCOPY);

  // Mask out the places where the bitmap will be placed.
  BitBlt(hdcMem, 0, 0, ptSize.x, ptSize.y, hdcObject, 0, 0, SRCAND);

  // Mask out the transparent colored pixels on the bitmap.
  BitBlt(hdcTemp, 0, 0, ptSize.x, ptSize.y, hdcBack, 0, 0, SRCAND);

  // XOR the bitmap with the background on the destination DC.
  BitBlt(hdcMem, 0, 0, ptSize.x, ptSize.y, hdcTemp, 0, 0, SRCPAINT);

  // Copy the destination to the screen.
  BitBlt(dc, xStart, yStart, ptSize.x, ptSize.y, hdcMem, 0, 0,
    SRCCOPY);

  // Place the original bitmap back into the bitmap sent here.
  BitBlt(hdcTemp, 0, 0, ptSize.x, ptSize.y, hdcSave, 0, 0, SRCCOPY);

  // Delete the memory bitmaps.
  DeleteObject(SelectObject(hdcBack, bmBackOld));
  DeleteObject(SelectObject(hdcObject, bmObjectOld));
  DeleteObject(SelectObject(hdcMem, bmMemOld));
  DeleteObject(SelectObject(hdcSave, bmSaveOld));

  // Delete the memory DCs.
  DeleteDC(hdcMem);
  DeleteDC(hdcBack);
  DeleteDC(hdcObject);
  DeleteDC(hdcSave);
  DeleteDC(hdcTemp);
end;
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von HAF4ever
HAF4ever

Registriert seit: 31. Okt 2003
Ort: Enns - Österreich
37 Beiträge
 
#3

Re: transparentes Bild über Bild ausgeben

  Alt 11. Nov 2003, 21:59
thx für die antwort
das werd ich gleich morgen mal testen
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#4

Re: transparentes Bild über Bild ausgeben

  Alt 12. Nov 2003, 14:27
hier mal die grunlegende vorgehensweise.
jpeg zu normalen TBitmaps
Paintbox anstelle von Timage benutzen

canvas.transparnent := true;
transparent color := cl blue;
canvas.draw()
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz