なんとなく、ふわっと・・

写真と画像処理関係とひとりごとをなんとなく書き溜めていきたい

アルファ値とクリップボード 2

2008-02-09 15:14:08 | C#(Graphics)

前回では、カスタムフォーマットをつかってアルファ値を保ったままクリップボードを
介してやり取りすることができた。しかし、これでは従来のグラフィックアプリには
貼り付けられない。 アルファ値を犠牲にしても従来どおり貼り付けられ、かつ、
カスタムフォーマットを知っているアプリにはアルファ値を保ったまま、貼り付ける
ことができるようにしたい。

ここを参考にして、複数のフォーマットをつかってクリップボードにコピーしてみよう。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace Clipboard32_2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private Bitmap MakeTestBitmap32(Color color)
        {
            Bitmap bmp = new Bitmap(200, 200, PixelFormat.Format32bppArgb);

            SolidBrush br = new SolidBrush(color);

            String st = "ふわっと";
            Font ft = new Font("・ュ・ウ 譏取悃", 30, FontStyle.Bold);
            //ft.Style = FontStyle.Bold;


            Graphics g = Graphics.FromImage(bmp);
            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
            g.FillEllipse(br, 10, 10, 180, 180);
            g.DrawString(st, ft, Brushes.White, 12f, 75f);

            g.Dispose();

            ft.Dispose();
            br.Dispose();

            return bmp;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Bitmap bmp = MakeTestBitmap32(Color.Crimson);

            Graphics g = this.CreateGraphics();
            g.DrawImage(bmp, 10, 10);
            g.Dispose();

            DataObject data = new DataObject();
            data.SetData(DataFormats.Bitmap, bmp);
            data.SetData("Bitmap32Format3", bmp);

            Clipboard.SetDataObject(data, true);

            bmp.Dispose();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (Clipboard.ContainsImage())
            {
                Bitmap bmp = (Bitmap)Clipboard.GetImage();

                Graphics g = this.CreateGraphics();
                g.DrawImage(bmp, 10, 220);
                g.Dispose();

                bmp.Dispose();
            }

            if (Clipboard.ContainsData("Bitmap32Format3"))
            {
                Bitmap bmp = Clipboard.GetData("Bitmap32Format3") as Bitmap;

                Graphics g = this.CreateGraphics();
                g.DrawImage(bmp, 220, 220);
                g.Dispose();

                bmp.Dispose();
            }
        }
    }
}


このように、DataObject のインスタンスに複数のフォーマットを設定してセットしてから
クリップボードに SetDataObject() する。

結果は、



となり、ふつうに GetImage() では従来どおり、 カスタムフォーマットで GetData() ではアルファ値を
保ったままペーストできる。

PSPaint にも従来どおり貼り付けられる。




Comments (4)

closed

2008-02-09 00:22:08 | 写真


Q't@つくばセンター、つくば市



[Sigma 17-70mmF2.8-4.5DCMacro]
[HDR]





Comment

あお

2008-02-09 00:19:33 | 写真












第16回つくば市文化協会芸術展「いけ花展」にて。 市民ギャラリー@中央公園、つくば市



[DFA Macro 100mmF2.8]
[HDR]



Comment

A

2008-02-09 00:02:35 | rinkaku






Comment