クリップボードのビットマップのカラー判定方法


KH  2007-10-11 22:25:20  No: 27991

クリップボードのビットマップを取得する場合、
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値で、アプリケーションで認識したいのですが
どうすればよいのでしょうか?
そもそもクリップボードに入るときに、このような区別が無くなる
のでしょうか?
お願い致します。


うんと  2007-10-12 02:20:37  No: 27992

クリップボードとの入出力

TBitmap はクリップボードへ DDB とパレットを渡したり、クリップボードから DDB とパレットを取り込むことが出来ます。残念ながら CF_DIB 形式のビットマップはサポートされていません。CF_BITMAP 形式しかサポートしないため、TBitmap のクリップボードとの入出力時におけるビットマップの品質は、その時のビデオモードに依存してしまいます。例えば 256 色のビデオモードで TrueColor の画像をクリップボードを介して正常な色で受け取ることはできません。

http://www.asahi-net.or.jp/~HA3T-NKMR/vcl2-7.htm

ということで、TBitmap を使う限りダメみたいですね。


KH  2007-10-12 02:57:40  No: 27993

わかりました。何か別の方法を探してみます。
うんとさん、ありがとうございました。


画像処理ソフト作成中〜  2007-10-12 16:36:59  No: 27994

http://www.asahi-net.or.jp/~HA3T-NKMR/deldown.htm

にある NKDIB を使用すれば判定する事が可能になりますよ

しかし 32bit には対応してません。


KH  2007-10-12 18:37:48  No: 27995

説明をよんで、使えそうか、試してみます。
画像処理ソフト作成中〜  さん、どうもありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加