2009-03-02 6 views
0

저는 Inscriber Technology의 Via Builder와 함께 작업하고 있습니다. 이 응용 프로그램은 하나의 .via 파일에 TGA 시퀀스 애니메이션을 병합하므로이 파일이 최적화되어 있으므로 큰 시퀀스를로드하는 것이 훨씬 좋습니다. 일부 Adobe 제품에는이 플러그인을 사용할 수있는 플러그인이 있습니다.작성자 및 델파이 - 알파 채널 지원을 통한 Inscriber 기술

저는 델파이에서 작업하고 있는데, 제 문제는 프레임에서 원래의 알파 채널을 다시 가져올 수 없다는 것입니다. 그쪽 IViaFile 인터페이스에서

function GetFrameBitmap(Frame: Integer): Integer; 

: 자신의 VIACODECLib_TLB 라이브러리를 사용하여, 나는 다음과 같은 기능을 가지고있다. 이 함수는 원래 시퀀스에서 프레임 비트 맵 핸들을 반환해야합니다. 다음 코드는 작동 할 수 있습니다.

viaObject: IViaFile; 
bmp: TBitmap; 
index: Integer; 

bmp.Handle := ViaObject.GetFrameBitmap(index); 

그러나 결과 비트 맵은 알파 채널이없는 원래 프레임입니다. 사실, 알파 채널은 전체 이미지에 대해 0입니다.

뭔가 잘못하고 있다고 가정하면 GetDIBits 함수를 사용하여 어딘가에 알파 채널이 있는지 확인하려고했습니다. 그래서 비트 맵을 저장하기에 충분한 시간 동안 메모리를 할당했고, 4 개의 채널을 가지고 있다고 가정하고 GetDIBits 함수를 사용했습니다. 이전과 같은 결과를 얻었습니다 : 전체 이미지에 대해 일반 프레임, 알파 채널 0.

Inscriber (포럼이 사망)는 Via Builder가 완전한 알파를 지원한다고 주장합니다. GetDIBits 함수를 사용하여 C++에서 올바르게 프레임을로드 할 수있는 사람을 알고 있지만 코드를 Delphi로 "변환"하면 작동하지 않습니다.

도움을 주시면 감사하겠습니다.

감사합니다.

답변

0

내가 생각하기에는 동료의 C++ 코드를 자세히 살펴볼 것을 제안합니다. 당신은 아마도 약간의 세부 사항을 놓쳤을 것입니다. 얼마나 많은 코드가 Windows API였으며, 벤더에 특정한 그래픽 코드가 얼마입니까? API 항목은 Delphi로 번역하기에 쉬워야합니다.

Delphi의 TBitmap 클래스는 투명도를 지원하지 않으므로 평범한 구식 GDI 대신 다른 그래픽 지원 라이브러리를 사용해야합니다. 그러나 GetDIBits과 같이 원시 비트 맵 데이터를 가져 오는 경우 최소한 알파 채널 데이터가 있는지 확인할 수 있어야합니다. (비트 맵을 올바르게 표시하는 방법을 찾아야하지만 적어도 적절한 데이터가 있어야한다는 것을 알고 있어야합니다.)

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 알파 블렌딩 (GR32)을 지원하는 그래픽 라이브러리를 사용하고 있음을 언급하는 것을 잊어 버렸습니다. GetDIBits를 사용하면 함수에서 반환 된 바이트 배열을 복사하는 것만으로 알파 채널이있는 원래 프레임이 모두 0으로 설정됩니다. C++ 코드를 다시 보겠습니다. 감사. – Rafael

관련 문제