アプリ版:「スタンプのみでお礼する」機能のリリースについて

解らないところがあるので質問させてください。
アイコンのフォーマットは、
ICONDIR、ICONDIRENTRY、BITMAPINFOHEADER、RGBQUAD、
カラーパレットの番号、マスクデータとなっているようですが、
このとおりにデータを書き込んでいくと
一応アイコンは作成されるのですが、
色情報が変なんです。
RGBQUADの並びが間違っているのではないかと思っているのですが、並びを変更してもうまく表示できません。
struct RGBQUAD
{
unsigned char rgbBlue; // 青成分
unsigned char rgbGreen; // 緑成分
unsigned char rgbRed; // 赤成分
unsigned char rgbReserved;
};
このとおりに書き込んでやればいいですよね?
また、マスクデータのところをRGB(0,0,0)のパレットを指定してあげなければいけないですよね?
すみませんがよろしくお願いします。
以下がパレっト番号設定関数です。
void RGBquadSet()
{
RGBquad=new RGBQUAD[ColorValue];
for(int i=0;i<ColorValue;i++)
{
RGBquad[i].rgbBlue=255;
RGBquad[i].rgbGreen=0;
RGBquad[i].rgbRed=0;
RGBquad[i].rgbReserved=0;
}
return;
}
void DataSet()
{//マスクデータのところをRGB(0,0,0)のパレットを指定
Data=new unsigned char[PictureSizeGet()];
MaskData=new unsigned char[PictureSizeGet()];
for(int i=0;i<PictureSizeGet();i++)
{
Data[i]=1;
}
return;
}
void Maskset()
{
Mask=new unsigned char[MaskSizeGet()];
for(int i=0;i<MaskSizeGet();i++)
{
Mask[i]=255;
}
return;
}

A 回答 (3件)

> 色情報が変なんです。


>    :
> また、マスクデータのところをRGB(0,0,0)のパレットを指定してあげなければいけないですよね

色情報が変なのではなく マスクの扱いを(意味も)間違えています。
マスクはパレットインデックスではなく、1ビットのマスク値そのものです。また、ラージアイコン(32x32)以外のアイコンの場合、確実にアライメントの操作が必要になります。


アイコンのフォーマットに関する正式なドキュメントはすでに絶滅しているようです。↓も技術サンプル扱い(英語)ですが、参考にどうぞ。

参考URL:http://msdn.microsoft.com/library/default.asp?ur …

この回答への補足

回答ありがとうございます。
あれから頑張っていました。
表示することは出来たのですが、
マスクを掛けると、
画像周りににじんでいるような感じがします。
エクスプローラーの並べて表示で確認しました。
それ以外では一応表示できています。
感じが気のせいなのかバグなのか解りかねるところであります。

補足日時:2005/02/13 21:05
    • good
    • 0

#1の方の意見が正解なら以下のようにpragmaで囲めばいけると思います(VCの場合)



#pragma pack(push,1)
struct RGBQUAD
{
unsigned char rgbBlue; // 青成分
unsigned char rgbGreen; // 緑成分
unsigned char rgbRed; // 赤成分
unsigned char rgbReserved;
};
#pragma pack(pop)
    • good
    • 0

構造体にパディング(隙間)があるのではないでしょうか?


sizeof(RGBWUAD)とかして4バイト(32ビット)になっていないようなら、charの並びをやめて、intかlong(いずれもその処理系で32ビットサイズのもの)でやってみたらどうでしょうか
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!