자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey 델파이XE3 - firemonkey2에서의 Bitmap Pixel 조작은 어떻게 해야 하나요?
2012.10.09 22:50
기존 xe2의 파이어몽키에서는
procedure TForm1.Button1Click(Sender: TObject);
var
x, y: Integer;
begin
for x := 0 to Image1.Bitmap.Width - 1 do
begin
for y := 0 to Image1.Bitmap.Height - 1 do
begin
Image1.Bitmap.Pixels[x, y] := tAlphaColorRec.Blue;
end;
end;
Image1.Bitmap.BitmapChanged;
end;
이런 형식으로 Image의 비트맵을 픽셀단위로 조작하는 것이 가능했었습니다. 이 기능으로 이미지 에디팅 처리를 해왔는데, XE3의 파이어몽키2에서는 픽셀에 관련한 내용들이 모두 사라졌네요.
어떤 방법으로 픽셀을 처리할 수 있는지 방법을 알려주세요.
이 문제 때문에 델파이 XE3를 구매하고도 제대로 사용을 못하고 있습니다.
Firemonkey 델파이XE3 - firemonkey2에서의 Bitmap Pixel 조작은 어떻게 해야 하나요?
2012.10.09 22:50
기존 xe2의 파이어몽키에서는
procedure TForm1.Button1Click(Sender: TObject);
var
x, y: Integer;
begin
for x := 0 to Image1.Bitmap.Width - 1 do
begin
for y := 0 to Image1.Bitmap.Height - 1 do
begin
Image1.Bitmap.Pixels[x, y] := tAlphaColorRec.Blue;
end;
end;
Image1.Bitmap.BitmapChanged;
end;
이런 형식으로 Image의 비트맵을 픽셀단위로 조작하는 것이 가능했었습니다. 이 기능으로 이미지 에디팅 처리를 해왔는데, XE3의 파이어몽키2에서는 픽셀에 관련한 내용들이 모두 사라졌네요.
어떤 방법으로 픽셀을 처리할 수 있는지 방법을 알려주세요.
이 문제 때문에 델파이 XE3를 구매하고도 제대로 사용을 못하고 있습니다.
아무도 답을 안주시네요...;;; 이래서야 앞으로 개발할때 필요한 내용들을 어떻게 해결하나 걱정되기도 합니다.
답을 찾았습니다. 이렇게 바꾸면 됩니다.
procedure TForm1.Button1Click(Sender: TObject);
var
x, y: Integer;
Map: TBitmapData;
begin
Image1.Bitmap.Canvas.BeginScene();
Image1.Bitmap.Map(TMapAccess.maReadWrite, Map);
for x := 0 to Image1.Bitmap.Width-1 do
begin
for y := 0 to Image1.Bitmap.Height-1 do
begin
Map.SetPixel(x, y, TAlphaColorRec.Blue);
end;
end;
Image1.Bitmap.Unmap(Map);
Image1.Bitmap.Canvas.EndScene;
end;
보시는 것 처럼, 기존에 사용하던 것과는 좀 많이 달라졌습니다.
별도로 TBitmapData 객체를 하나 가지고 있어야 하고, Bitmap에서 Map이라는 메쏘드를 이용해서 TBitmapData 객체에 쓰고, 그 비트맵데이터의 픽셀 조작 메소드로 비트맵을 조작한 다음 Bitmap.unmap() 매쏘드로 다시 비트맵에 써주는 식으로 동작하는 거죠.
다른 부분은 편리해 졌는데 비트맵 조작하는 부분은 왜이리 복잡해졌는지 모르겠습니다...ㅡㅡ;;