Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   teil eines bitmaps in ein anderes kopieren (https://www.delphipraxis.net/117594-teil-eines-bitmaps-ein-anderes-kopieren.html)

lbccaleb 21. Jul 2008 20:28


teil eines bitmaps in ein anderes kopieren
 
hy ther,


also ich möchte aus einem teil eines bitmaps, ein neues erstellen!
ich habe als ausgangsbild, ein bitmap mit den maßen 8x464!
ich möchte das bild in 58 teile aufteilen, also jedes entstandene bild soll dann 8x8 sein!



dafür hab ich folgende funktion geschriebn bei der index das bild ist, was zurückgeliefert wird!



edit: nach einigen berichtigungen, bin ich nun bei folgendem source angekommen, hab nochmal nachgeschlagen und brauche bei result und sourcebitmap ein devicekontext, wo aber nehm ich mir das her??

Delphi-Quellcode:
function GetBitmapFromTable(SourceBitmap: HBitmap; index: integer): HBitmap;
  begin;
    if SourceBitmap <> 0 then
      begin
        Result := SourceBitmap;
        SetBitmapDimensionEx(Result, 8, 8, 0);
        BitBlt(Result, (index * 8), 8, 8, 8, SourceBitmap, 0, 0, SRCCOPY);
      end;
  end;
aber bitblt gibt mir immer 0 zurück, woran kann das liegen??

edit: vom ganzen probieren haben sich paar fehler eingeschlichen^^

Sanchez 21. Jul 2008 20:34

Re: teil eines bitmaps in ein anderes kopieren
 
Hi Martin,

Du gibst ein Bitmap mit, weist dem Result das übergebene Bitmap zu. Dann setzt du das Bitmap (auf das du jetzt mit SourceBitmapH und auch mit Result referenzierst) auf die Dimension 8*8. Anschließend kopierst du einen 8*8 Ausschnitt aus dem Bitmap auf sich selbst. Wenn Index > 0 ist, dann ist der Ausschnitt gar nicht mehr am Quellbitmap vorhanden.

Du musst auf alle Fälle fürs Result ein eigenes Bitmap erzeugen.

lg,
daniel

lbccaleb 21. Jul 2008 20:38

Re: teil eines bitmaps in ein anderes kopieren
 
Zitat:

Zitat von Sanchez
Hi Martin,

Du gibst ein Bitmap mit, weist dem Result das übergebene Bitmap zu. Dann setzt du das Bitmap (auf das du jetzt mit SourceBitmapH und auch mit Result referenzierst) auf die Dimension 8*8. Anschließend kopierst du einen 8*8 Ausschnitt aus dem Bitmap auf sich selbst. Wenn Index > 0 ist, dann ist der Ausschnitt gar nicht mehr am Quellbitmap vorhanden.

Du musst auf alle Fälle fürs Result ein eigenes Bitmap erzeugen.

lg,
daniel

das oben mit dem h war schreibfehler, wie erzeug ich das denn am besten??? und wieso ist der kopierende auschnitt nicht mehr auf dem bild??? das ausgangsbild ist doch gross genug, und ich will ihm ja nur sagen ab wann er von dem bild kopieren soll

wie würdest du das machen??

Namenloser 22. Jul 2008 00:18

Re: teil eines bitmaps in ein anderes kopieren
 
BitBlt erwartet kein hBitmap, sondern ein hDC.

roga 22. Jul 2008 00:29

Re: teil eines bitmaps in ein anderes kopieren
 
...und sollte es nicht so sei...

Delphi-Quellcode:
  BitBlt(Result, 0, (index * 8), 8, 8, SourceBitmap, 0, 0, SRCCOPY);
...da das QuellBitmap 8x464 ist ??

lbccaleb 22. Jul 2008 16:59

Re: teil eines bitmaps in ein anderes kopieren
 
Zitat:

Zitat von NamenLozer
BitBlt erwartet kein hBitmap, sondern ein hDC.

OK, wie muss ich das also genau machen??? wo bekomm ich denn ein hdc her?? kenn mich damit nicht aus...




Zitat:

Zitat von roga
...und sollte es nicht so sei...

Delphi-Quellcode:
  BitBlt(Result, 0, (index * 8), 8, 8, SourceBitmap, 0, 0, SRCCOPY);
...da das QuellBitmap 8x464 ist ??


ja genau, war schon spät.. ;-)

DeddyH 22. Jul 2008 17:07

Re: teil eines bitmaps in ein anderes kopieren
 
Ein hDC wäre z.B. Bitmap.Canvas.Handle.

lbccaleb 22. Jul 2008 17:10

Re: teil eines bitmaps in ein anderes kopieren
 
Zitat:

Zitat von DeddyH
Ein hDC wäre z.B. Bitmap.Canvas.Handle.

mhh und wenn ich kein tbitmap hab??

DeddyH 22. Jul 2008 17:19

Re: teil eines bitmaps in ein anderes kopieren
 
Dann musst Du Dir den Devicecontext anders besorgen.

lbccaleb 22. Jul 2008 17:29

Re: teil eines bitmaps in ein anderes kopieren
 
ok aber wie genau denn, und vor allem von was/wo soll ich ein devicekontext erzeugen oder herholen??

DeddyH 22. Jul 2008 17:30

Re: teil eines bitmaps in ein anderes kopieren
 
Da Du anscheinend nur ein Handle auf eine Bitmap hast und ich keine weitere Idee dazu (oder aktuell ein Brett vorm Kopf), muss ich leider passen :( .

lbccaleb 22. Jul 2008 17:45

Re: teil eines bitmaps in ein anderes kopieren
 
kann ich denn aus einem bitmaphandle irgendwie nen devicekontext erstellen??

Medium 22. Jul 2008 19:19

Re: teil eines bitmaps in ein anderes kopieren
 
CreateCompatibleDC mit Parameter nil erzeugt dir einen passenden DC, und mit SelectObject kannst du das HBitmap in den DC selektieren. Ich habe es nicht getestet, aber ich kann mir gut vorstellen, dass dies der Weg ist. Einen DC zu einem Bitmap gibt es nämlich nicht, aber einem DC kann man so ein Bitmap zuordnen.

SirThornberry 22. Jul 2008 19:27

Re: teil eines bitmaps in ein anderes kopieren
 
ansonsten sollte es auch so gehen:
Delphi-Quellcode:
var
  lBitmap: TBitmap;
begin
  lBitmap := TBitmap.Create();
  try
    lBitmap.Handle := BitmapHandle;
    try
      //Now you can work with lBitmap.Canvas.Handle
    finally
      lBitmap.Handle := 0;
    end;
  finally
    lBitmap.Free;
  end;

Medium 22. Jul 2008 19:30

Re: teil eines bitmaps in ein anderes kopieren
 
Ist halt die Frage ob er direkt mit dem GDI arbeiten möchte/muss, oder sich das Polster von Delphi gönnen kann :)

Namenloser 22. Jul 2008 23:02

Re: teil eines bitmaps in ein anderes kopieren
 
Zur Not in die Sourcen von TBitmap schauen, falls man daraus schlau wird.

lbccaleb 22. Jul 2008 23:41

Re: teil eines bitmaps in ein anderes kopieren
 
nee alles ohne tbitmap, nur winapi...

mit tbitmap, hab ichs schon ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz