2006. április 10., hétfő
How to extract coordinates from a region
Problem/Question/Abstract:
I am trying to do regioning backwards. I am writing an application that will read in a bitmap, allow the user to set a transparent colour, and then calculate the point set that would be needed to make that region transparent. I then want to supply the user with the coordinates as a set of coordinates, i.e. I want to extract it from a region format. Why? Because that's how Winamp takes the data in to make its custom shaped forms. But I can't seem to figure out how to pull the data out.
Answer:
One thing I found is that you must create a region prior to GetWindowRgn. I thought that one was created by default. I made a function that does what you need:
procedure TForm1.ShowRgnInfo(Rgn: HRGN);
type
RgnRects = array[0..1000] of TRect;
PRgnRect = ^RgnRects;
var
RgnData: PRgnData;
Size: DWORD;
i: Integer;
R: TRect;
RgnPtr: PRgnRect;
begin
Size := GetRegionData(Rgn, 0, nil);
Memo1.Lines.Add('Size = ' + IntToStr(Size));
GetMem(RgnData, Size);
GetRegionData(Rgn, Size, RgnData);
Memo1.Lines.Add('Number of Rectangles = ' + IntToStr(RgnData.rdh.nCount));
RgnPtr := @RgnData.Buffer;
for i := 0 to RgnData.rdh.nCount - 1 do
begin
R := RgnPtr[i];
Memo1.Lines.Add('Rect ' + IntToStr(i));
Memo1.Lines.Add(IntToStr(R.Left) + ', ' + IntToStr(R.Top) + ', ' +
IntToStr(R.Right) + ', ' + IntToStr(R.Bottom));
end;
end;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése