2011-08-04 5 views
5

저는 Barcode Studio 2011을 사용하여 QR 코드를 Graphics32-TImage32 구성 요소에 페인팅하고 있는데이 구성을 PNG 형식으로 저장하려고합니다. 그러나 흰색으로 표시하려면 투명하게 지정해야합니다. 이는 Graphics32의 OuterColor에 지정되어 있습니다.투명도가있는 png 파일을 저장하는 방법은 무엇입니까?

OnFormCreate 난 그냥

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    psBarcodeComponent1.BarCode := 'some text here...'; 
end; 

을 가지고 있고이 버튼을 클릭 이벤트에 할당 된 그림을 가지고있는 순간

procedure TForm1.Button8Click(Sender: TObject); // Paint the barcode 
var 
    bmp: TBitmap32; 
    Coords: TRect; 
begin 
bmp := TBitmap32.Create; 
bmp.SetSize(image.Width, image.Height); 
bmp.Canvas.Brush.Color := color; 
bmp.Canvas.Rectangle(-1, -1, image.Width+2, image.Height+2); 

bmp.DrawMode := dmTransparent; 
bmp.OuterColor := clWhite; 

// make Coords the size of image 
Coords := Rect(0,0,image.Width,image.Height); 
psBarcodeComponent1.PaintBarCode(bmp.Canvas, Coords); 
image.Bitmap.Assign(bmp); 
end; 

내가 PNG 형식으로 비트 맵 변환 뱀파이어 (Vampyre) 이미징 라이브러리를 사용하고 있습니다 그러나 나는 기꺼이 도서관, 기능 및 조언을 사용할 것입니다 - 나는 이것을 거의 일주일 동안 지금하려고 노력했습니다! 필자는 graphics32의 문서와 Vampyre Imaging Library의 문서를 다시 읽었습니다. 그러나 내가 시도하지 않은 것은 흰색을 투명한 색으로 변환합니다.

이 내가 그것을 저장하고 어떻게) ...

, 나는 clWhite, clWhite32 또한 dmBlend에 drawMode을 설정하고 아무 소용이 있지만, 많은 좌절, 커피, 또한 약간의 맥주에 모든 크로 마키 기능을 적용을 시도
procedure TForm1.Button7Click(Sender: TObject); // Save with Vampyre Imaging Lib 
{ Try to save in PNG format with transparancy } 
var 
    FImage: TSingleImage; 
begin 
    FImage := TSingleImage.Create; 
    ConvertBitmap32ToImage(image.Bitmap, FImage); 
    FImage.SaveToFile('VampyreLibIMG.png'); 
end; 

이렇게하면 검정 색의 미리보기 이미지가되고 Windows 사진 뷰어에서 볼 때 완전히 투명합니다.

충분한 정보를 제공하고 누군가가 나를 도울 수 있기를 바랍니다.

크리스

+0

bmp.transparentColor : = clWhite를 설정하면 어떻게됩니까? bmp.outerColor 대신에 : clWhite? – ComputerSaysNo

+0

TBitmap32에 해당 멤버가 없습니다. Pixel에서 OuterColor를 선택하려고했지만 효과가 없습니다. bmp.OuterColor : = bmp.Pixel [0,1]; – Shambhala

답변

4

이 접근 방법은 나를 위해 작동 :

uses GR32, GR32_PNG, GR32_PortableNetworkGraphic; 

var 
    Y: Integer; 
    X: Integer; 
    Png: TPortableNetworkGraphic32; 

    function IsWhite(Color32: TColor32): Boolean; 
    begin 
    Result:= (TColor32Entry(Color32).B = 255) and 
      (TColor32Entry(Color32).G = 255) and 
      (TColor32Entry(Color32).R = 255); 
    end; 

begin 
    with Image321 do 
    begin 
    Bitmap.ResetAlpha; 
    for Y := 0 to Bitmap.Height-1 do 
     for X := 0 to Bitmap.Width-1 do 
     begin 
     if IsWhite(Bitmap.Pixel[X, Y]) then 
      Bitmap.Pixel[X,Y]:=Color32(255,255,255,0); 
     end; 
    Png:= TPortableNetworkGraphic32.Create; 
    Png.Assign(Bitmap); 
    Png.SaveToFile('C:\Temp\NowTransparent.png'); 
    Png.Free; 
    end; 
end; 

이가 01 사용. 꽤 직접적인 방법으로 모든 흰색 픽셀을 투명하게 설정합니다.

추신 : Image321TBitmap32을 포함하는 TImage32 구성 요소입니다.

+0

이 예제에서는 오류가 발생했습니다. GR32.pas 단위의 "procedure TCustomBitmap32.Assign (출처 : TPersistent)"에서 어떤 도움이 필요합니까? – XBasic3000

3

당신은 델파이의 버전을 지정하지 않은,하지만 델파이 버전은 "PngImage"을 가지고있는 경우 코드를 넣고 완벽하게 (김프 및 Windows 사진 뷰어에로드 된 작품 (I은 D2009의 +와 함께 제공 믿는다), 그것은 프레임과 투명한 배경과 텍스트를 그립니다, 그것으로 재생 주시기 :

uses 
    PngImage; 

procedure TForm1.OnBtnClick(Sender: TObject); 
var 
    bmp: TBitmap; 
    png: TPngImage; 
begin 
    bmp := TBitmap.Create; 
    bmp.Width := 200; 
    bmp.Height := 200; 

    bmp.Canvas.Brush.Color := clBlack; 
    bmp.Canvas.Rectangle(20, 20, 160, 160); 

    bmp.Canvas.Brush.Style := bsClear; 
    bmp.Canvas.Rectangle(1, 1, 199, 199); 

    bmp.Canvas.Brush.Color := clWhite; 
    bmp.Canvas.Pen.Color := clRed; 
    bmp.Canvas.TextOut(35, 20, 'Hello transparent world'); 

    bmp.TransparentColor := clWhite; 
    bmp.Transparent := True; 

    png := TPngImage.Create; 
    png.Assign(bmp); 
    png.SaveToFile('C:\test.png'); 

    bmp.Free; 
    png.Free; 
end; 
+0

고맙습니다. 표준 TImage로 전환하고 코드를 적용 해 보겠습니다. Delphi 2010을 사용 중입니다. – Shambhala

+0

Delphi 2010에서이 문제를 완벽하게 처리 할 것입니다. TImage에도 일부 불법 복제 옵션이 있으며, 도움이된다면 대답으로 받아 들일 것을 잊지 마십시오. (: – ComputerSaysNo

관련 문제