クリップボードのビットマップを取得する場合、
8bit(256色)のビットマップも24bit(フルカラー)のビットマップも
TBitMapにAssign後、PixelFormatを見ると、pfDeviceになってしまいます。
if Clipboard.HasFormat(CF_BITMAP) then begin
bmp:=TBitMap.Create;
bmp.Assign(Clipboard);
if bmp.PixelFormat = pfDevice then memo1.lines.add('pfDevice');
if bmp.PixelFormat = pf8bit then memo1.lines.add('pf8bit');
if bmp.PixelFormat = pf24bit then memo1.lines.add('pf24bit');
Image.Picture.Assign(bmp);
end;
8bitの場合は、0〜255のパレットで(仮に100,101,102番の3色パレットで
入っていたらそのまま100,101,102と認識したい)、
24bitの場合は入っているRGB値で、アプリケーションで認識したいのですが
どうすればよいのでしょうか?
そもそもクリップボードに入るときに、このような区別が無くなる
のでしょうか?
お願い致します。
クリップボードとの入出力
TBitmap はクリップボードへ DDB とパレットを渡したり、クリップボードから DDB とパレットを取り込むことが出来ます。残念ながら CF_DIB 形式のビットマップはサポートされていません。CF_BITMAP 形式しかサポートしないため、TBitmap のクリップボードとの入出力時におけるビットマップの品質は、その時のビデオモードに依存してしまいます。例えば 256 色のビデオモードで TrueColor の画像をクリップボードを介して正常な色で受け取ることはできません。
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl2-7.htm
ということで、TBitmap を使う限りダメみたいですね。
わかりました。何か別の方法を探してみます。
うんとさん、ありがとうございました。
http://www.asahi-net.or.jp/~HA3T-NKMR/deldown.htm
にある NKDIB を使用すれば判定する事が可能になりますよ
しかし 32bit には対応してません。
説明をよんで、使えそうか、試してみます。
画像処理ソフト作成中〜 さん、どうもありがとうございます。
ツイート | ![]() |