첫째로, 이것이 중복 인 경우에 나는 사과한다; 하지만 내 Google-fu는 오늘 실패하고있는 것 같습니다.하나에 2 바이트
Photoshop 용 이미지 형식 모듈을 작성하는 중이고이 형식의 저장 옵션 중 하나에는 4 비트 알파 채널이 포함되어 있습니다. 물론 변환해야하는 데이터는 8 비트/1 바이트 알파입니다. 따라서 본질적으로 알파 2 바이트를 모두 취해 하나에 병합해야합니다. 각각 8 비트 알파 데이터와 4 비트 알파 데이터를 포함
for(int x=0,w=0;x < alphaData.size();x+=2,w++)
{
short ashort=(alphaData[x] << 8)+alphaData[x+1];
alphaFinal[w]=(unsigned char)ashort;
}
alphaData 및 alphaFinal 있습니다 벡터 :
내 시도 (아래), 저는 믿습니다 개선의 여지가 많이있다. 2 바이트를 하나의 값으로 줄이는 것이 "해상도"를 잃는 결과를 낳을 수밖에 없지만, 더 나은 방법이 있다고 생각합니다. 추가 정보
가 여기 역을 수행하는 루프이다alphaData는 상기와 동일한 목적으로 기능하고, imgData 부호없는 문자 벡터이다 (포토샵 8 비트로 포맷으로부터 4 비트 알파 변환) 원시 이미지 데이터를 보유합니다.
for(int b=alphaOffset,x2=0;b < (alphaOffset+dataLength); b++,x2+=2)
{
unsigned char lo = (imgData[b] & 15);
unsigned char hi = ((imgData[b] >> 4) & 15);
alphaData[x2]=lo*17;
alphaData[x2+1]=hi*17;
}
+1 Google-Fu 단어 재생 전용입니다. – WhozCraig